Asignar un evento solo una vez a un control

02/04/2004 - 16:51 por Luis Ruiz | Informe spam
Hola, tengo una clase que recibe un texbox y en el
contructor le agrega un un evento keyup de la siguiente
manera:
this.m_txtCodigo.KeyUp += new
System.Windows.Forms.KeyEventHandler(this.busca);
El problema es que si hago varias instancia de mi clase
con el mismo texbos como parametro se le agregara igual
numero de eventos key up al textbox, lo que causa que se
ejecune el metodo musca varias veces :(
Cómo puedo asegurarme que solo se le asigne una vez el
evento al textbox, no se preguntando si ya lo tiene o
eliminado todos antes, no se?
Gracias!

He probafo esto:
if ( this.m_txtCodigo.KeyUp != null)
this.m_txtCodigo.KeyUp += new
System.Windows.Forms.KeyEventHandler(this.busca);

Pero me da el siguiente error almomento de compilar:
El evento 'System.Windows.Forms.Control.KeyUp' sólo puede
aparecer a la izquierda de += o -
VS2002

Preguntas similare

Leer las respuestas

#1 José Miguel Torres
02/04/2004 - 17:34 | Informe spam
Hola:

Prueba creando una variable estática que contenga el estado del evento,
es decir si se ha asignado o no.

SAludos

José Miguel Torres
jtorres_diaz(ARROBA)terra.es

"Luis Ruiz" escribió en el mensaje
news:12dfe01c418c1$f140d850$
Hola, tengo una clase que recibe un texbox y en el
contructor le agrega un un evento keyup de la siguiente
manera:
this.m_txtCodigo.KeyUp += new
System.Windows.Forms.KeyEventHandler(this.busca);
El problema es que si hago varias instancia de mi clase
con el mismo texbos como parametro se le agregara igual
numero de eventos key up al textbox, lo que causa que se
ejecune el metodo musca varias veces :(
Cómo puedo asegurarme que solo se le asigne una vez el
evento al textbox, no se preguntando si ya lo tiene o
eliminado todos antes, no se?
Gracias!

He probafo esto:
if ( this.m_txtCodigo.KeyUp != null)
this.m_txtCodigo.KeyUp += new
System.Windows.Forms.KeyEventHandler(this.busca);

Pero me da el siguiente error almomento de compilar:
El evento 'System.Windows.Forms.Control.KeyUp' sólo puede
aparecer a la izquierda de += o -
VS2002
Respuesta Responder a este mensaje
#2 William Fernandez
02/04/2004 - 18:33 | Informe spam
Hola, respondiendo "textualmente" tu pregunta, sí existe
una forma de eliminar las declaraciones de evento del
objeto, usando el método Remove o RemoveAll del delegado.

System.Windows.Form.KeyEventHandler.RemoveAll();

¿? Tengo una inquietud, que es realmente lo que buscas
hacer, establecer un método de busqueda global paa los
textbox al momento de pulsar una tecla.

Si es así, porque no creas tu propia clase control
TextBox y sobreescribes el evento OnKeyPress para que use
consulte la información que necesitas.

public class MyTexboxt:TextBox
{
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress (e);
// Aqui colocas el código para que se valide el texto
}
}

Algo así, es solo una idea.

Saludos
Hola, tengo una clase que recibe un texbox y en el
contructor le agrega un un evento keyup de la siguiente
manera:
this.m_txtCodigo.KeyUp += new
System.Windows.Forms.KeyEventHandler(this.busca);
El problema es que si hago varias instancia de mi clase
con el mismo texbos como parametro se le agregara igual
numero de eventos key up al textbox, lo que causa que se
ejecune el metodo musca varias veces :(
Cómo puedo asegurarme que solo se le asigne una vez el
evento al textbox, no se preguntando si ya lo tiene o
eliminado todos antes, no se?
Gracias!

He probafo esto:
if ( this.m_txtCodigo.KeyUp != null)
this.m_txtCodigo.KeyUp += new
System.Windows.Forms.KeyEventHandler(this.busca);

Pero me da el siguiente error almomento de compilar:
El evento 'System.Windows.Forms.Control.KeyUp' sólo


puede
aparecer a la izquierda de += o ->
VS2002
.

Respuesta Responder a este mensaje
#3 Luis Ruiz
03/04/2004 - 00:26 | Informe spam
Gracias, lo que necesito es un removeall del
keyeventhandler del textbox específico. Voy a investigar
si se puede hacer de algunaforma.

Aclarando el problema (intentandolo):
Tengo una clase que hereda de windows.forms.form que me
permite, al darle la tecla f12 sobre un textbox, abrirme
un formulario con un listado para escoger un valor para
ese textbox, algo como la funcionalidad de un un combo,
solo que con más opciones para listados grandes
(filtrado, ordenamiento, etc.)
Para lograr esto debo hacer una instancia de esta clase
en el formulario que será utilizada, y en su constructur
le defino el control textbox sobre el cuál se hará esta
funcionalidad.
Al crearse el objeto, le agrega al textbox el evento
keyup.
El problema es que si necesito hacer diferente instancias
de esa clase sobre el mismo textbox le asignara todas las
veces el evento, lo que produce que haga repetidas veces
el evento lo cualno quiero.
Gracias.


Hola, respondiendo "textualmente" tu pregunta, sí existe
una forma de eliminar las declaraciones de evento del
objeto, usando el método Remove o RemoveAll del delegado.

System.Windows.Form.KeyEventHandler.RemoveAll();

¿? Tengo una inquietud, que es realmente lo que buscas
hacer, establecer un método de busqueda global paa los
textbox al momento de pulsar una tecla.

Si es así, porque no creas tu propia clase control
TextBox y sobreescribes el evento OnKeyPress para que


use
consulte la información que necesitas.

public class MyTexboxt:TextBox
{
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress (e);
// Aqui colocas el código para que se valide el texto
}
}

Algo así, es solo una idea.

Saludos
Hola, tengo una clase que recibe un texbox y en el
contructor le agrega un un evento keyup de la siguiente
manera:
this.m_txtCodigo.KeyUp += new
System.Windows.Forms.KeyEventHandler(this.busca);
El problema es que si hago varias instancia de mi clase
con el mismo texbos como parametro se le agregara igual
numero de eventos key up al textbox, lo que causa que




se
ejecune el metodo musca varias veces :(
Cómo puedo asegurarme que solo se le asigne una vez el
evento al textbox, no se preguntando si ya lo tiene o
eliminado todos antes, no se?
Gracias!

He probafo esto:
if ( this.m_txtCodigo.KeyUp != null)
this.m_txtCodigo.KeyUp += new
System.Windows.Forms.KeyEventHandler(this.busca);

Pero me da el siguiente error almomento de compilar:
El evento 'System.Windows.Forms.Control.KeyUp' sólo


puede
aparecer a la izquierda de += o ->>
VS2002
.



.

Respuesta Responder a este mensaje
#4 William Fernandez
05/04/2004 - 21:23 | Informe spam
Ok. ya veo.- Lo que deberias de hacer en tu clase es un
método que tenga la misma firma que el evento KeyUp del
TextBox y sólo asignarle el manejador al TextBox desde
fuera de tu clase.- O como te comente antes creas un
control personalizado derivado del textbox y
sobreescribes el evento OnKeyUp del mismo. De cualquiera
de las dos forma te evitas tener que asignar el manejador
del evento y te ahorras la creación de un textbox, todo
lo manejas con el objeto sender del metodo que crearias.

Saludos




Gracias, lo que necesito es un removeall del
keyeventhandler del textbox específico. Voy a


investigar
si se puede hacer de algunaforma.

Aclarando el problema (intentandolo):
Tengo una clase que hereda de windows.forms.form que me
permite, al darle la tecla f12 sobre un textbox, abrirme
un formulario con un listado para escoger un valor para
ese textbox, algo como la funcionalidad de un un combo,
solo que con más opciones para listados grandes
(filtrado, ordenamiento, etc.)
Para lograr esto debo hacer una instancia de esta clase
en el formulario que será utilizada, y en su constructur
le defino el control textbox sobre el cuál se hará esta
funcionalidad.
Al crearse el objeto, le agrega al textbox el evento
keyup.
El problema es que si necesito hacer diferente


instancias
de esa clase sobre el mismo textbox le asignara todas


las
veces el evento, lo que produce que haga repetidas veces
el evento lo cualno quiero.
Gracias.


Hola, respondiendo "textualmente" tu pregunta, sí




existe
una forma de eliminar las declaraciones de evento del
objeto, usando el método Remove o RemoveAll del




delegado.

System.Windows.Form.KeyEventHandler.RemoveAll();

¿? Tengo una inquietud, que es realmente lo que buscas
hacer, establecer un método de busqueda global paa los
textbox al momento de pulsar una tecla.

Si es así, porque no creas tu propia clase control
TextBox y sobreescribes el evento OnKeyPress para que


use
consulte la información que necesitas.

public class MyTexboxt:TextBox
{
protected override void OnKeyPress(KeyPressEventArgs e)
{
base.OnKeyPress (e);
// Aqui colocas el código para que se valide el texto
}
}

Algo así, es solo una idea.

Saludos
Hola, tengo una clase que recibe un texbox y en el
contructor le agrega un un evento keyup de la






siguiente
manera:
this.m_txtCodigo.KeyUp += new
System.Windows.Forms.KeyEventHandler(this.busca);
El problema es que si hago varias instancia de mi






clase
con el mismo texbos como parametro se le agregara






igual
numero de eventos key up al textbox, lo que causa que




se
ejecune el metodo musca varias veces :(
Cómo puedo asegurarme que solo se le asigne una vez el
evento al textbox, no se preguntando si ya lo tiene o
eliminado todos antes, no se?
Gracias!

He probafo esto:
if ( this.m_txtCodigo.KeyUp != null)
this.m_txtCodigo.KeyUp += new
System.Windows.Forms.KeyEventHandler(this.busca);

Pero me da el siguiente error almomento de compilar:
El evento 'System.Windows.Forms.Control.KeyUp' sólo


puede
aparecer a la izquierda de += o ->>>
VS2002
.



.



.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida