Eventos de controles

15/06/2005 - 14:05 por yego | Informe spam
Hola a todos,
Tengo un problemilla con los eventos; he implementado el keydown de un
control (Tipo T) que es la base de otros controles (Tipo I, Tipo F). En
este evento (Tipo T) lo que hago es recuperar el tipo de control y su valor
actual. Pues bien, unicamente realiza el evento del control base (Tipo T)
ignorando el nuevo funcionamiento de este mismo evento (keydown) para los
controles derivados.

Hay algo que estoy haciendo mal o realmente no se puede hacer lo que yo
quiero??.

Saludos.

Preguntas similare

Leer las respuestas

#6 Miguel Angel Campos
15/06/2005 - 17:04 | Informe spam
Si lo que quieres es sobrescribir los métodos de una clase padre, deberías
utilizar el método OnKeyDown, y controlar así si quieres que se produzca el
evento o no.

De todas formas no tengo muy claro cual es el problema.

Un Saludo,

Miguel Angel Campos
MCAD.NET

"yego" escribió en el mensaje
news:
Hola Miguel Angel, este es el código de uno de los controles heredados.
Está
formado por tres controles iguales base.
El código del base es el mismo; Que es lo que ocurre; pues que sólo actua
para el campo donde se hizo el keydown, no del control al cual pertenece,
así pues la información almacenada no es correcta.

Un saludo.

private void SAGCodCta_KeyDown(object sender,
System.Windows.Forms.KeyEventArgs e)
{
string sagTipoControl=this.GetType().ToString();
//Copia al portapapeles
if(e.KeyCode == Keys.F9)
{
Clipboard.SetDataObject(sagTipoControl + "|"+ this.ValorReal);
return;
}
//Recupera del portapapeles
if(e.KeyCode == Keys.F10)
{
IDataObject datoPP = Clipboard.GetDataObject();
string dato = datoPP.GetData(DataFormats.Text).ToString();
string [] split=null;
split=dato.ToString().Split('|');
if(split.Length==2)
{
if (sagTipoControl == split[0])
{
this.ValorReal=split[1];
}
}
}
}




"Miguel Angel Campos" <SPAMmacampos ARRUBA .idesarrollaSPAM.com> escribió
en
el mensaje news:
Puedes copiar aquí el código del evento tanto del Tipo T como del resto
de
tipos.

Un Saludo,

Miguel Angel Campos
MCAD.NET

"yego" escribió en el mensaje
news:
> Hola a todos,
> Tengo un problemilla con los eventos; he implementado el keydown de un
> control (Tipo T) que es la base de otros controles (Tipo I, Tipo F).
> En
> este evento (Tipo T) lo que hago es recuperar el tipo de control y su
> valor
> actual. Pues bien, unicamente realiza el evento del control base (Tipo


T)
> ignorando el nuevo funcionamiento de este mismo evento (keydown) para


los
> controles derivados.
>
> Hay algo que estoy haciendo mal o realmente no se puede hacer lo que yo
> quiero??.
>
> Saludos.
>
>
>






Respuesta Responder a este mensaje
#7 Tristan
15/06/2005 - 17:11 | Informe spam
Justo nada más dejarte el mensaje me di cuenta de que si existe una forma de
eliminar los delegados añadidos por una clase base. Por ejemplo:


class Base: Form
{
public Base()
{
Click += new EventHandler(Base_Click);
}

protected void Base_Click(object sender, EventArgs e)
{
MessageBox.Show("Click Base");
}
}

class Hija: Base
{
public Hija(): base()
{
Click -= new EventHandler(base.Base_Click);
}
}

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#8 yego
15/06/2005 - 17:15 | Informe spam
Te paso a comentar un poco más para que me puedas corregir en mi forma de
trabajar. ;).

De un TextBox he desarrollado un componente (ComponenteT); he implementado
algunos eventos, he incluido alguna propiedad genérica.
Tengo otro control que tiene 3 ComponentesT llamado ComponenteCC. He
incluido estos componentes (ComponenteT) porque toda la parte genérica está
desarrollada en él. (He de decir que para estos controles me he guiado mucho
en su forma en la que actuan [eventos para tabulacion y restriccion de
teclas...]).
El evento que en este caso me está dando problemas es el keydown. Lo que me
gustaría que hiciese es que cuando se presione una tecla de función [F9], se
copie su valor en el portapapeles para más adelante ser recuperado mediante
otra tecla de función [F10], donde determinaremos si lo que hay en el
portapapeles es del mismo tipo que el control activo (donde se ha
presionado) y se puede volcar el dato. Este funcionamiento ha de ser igual
en TODOS los controles; El código para todos ellos es el mismo; pero que
ocurre; que cuando se pulsa el [F9] es el evento del ComponenteT el que
primero se dispara e ignora el evento implementado en el propio control
ComponenteCC. Incluso para cada uno de los ComponentesT que forman el
ComponenteCC, he implementado de nuevo el código del Evento keydown, pero
sigue saltándoselo. Hago que todos los eventos para el keypress tiren del
mismo delegado, el keypress de ComponenteCC pero sigue saltándoselo. (no se
si me estoy explicando con la suficiente claridad).

Vaya ladrillo!!!
Espero que me disculpeis, me aburro hasta a mi mismo!
Saludos


"Tristan" escribió en el mensaje
news:
No acabo de comprender lo que quieres hacer, yego.

En principio los delegados se añaden (+=) sobre un evento. Una clase no
tiene ninguna forma de eliminar un delegado añadido por otra. Bueno, a no
ser que exista alguna forma mediante reflection, pero con seguridad no
directamente.

¿Pero para que necesitas eso?

He intentado comprender por tu otro mensaje como funciona tu aplicación,
pero no lo consigo. ¿Un control compuesto de otros tres, y que a su vez
hereda de ellos? No me entero bien.

Juan Carlos Badiola
MVP - C#


Respuesta Responder a este mensaje
#9 Tristan
15/06/2005 - 17:58 | Informe spam
Ummm, sigo sin tener claro lo que quieres :-(

Al principio entendí una cosa, después la contraria, y ahora otra vez
entiendo la primera:

pero que
ocurre; que cuando se pulsa el [F9] es el evento del ComponenteT el que
primero se dispara e ignora el evento implementado en el propio control
ComponenteCC. Incluso para cada uno de los ComponentesT que forman el
ComponenteCC, he implementado de nuevo el código del Evento keydown, pero
sigue saltándoselo. Hago que todos los eventos para el keypress tiren del
mismo delegado, el keypress de ComponenteCC pero sigue saltándoselo.



No tiene por que saltarse ningún delegado. Cuando pulses la tecla, se tienen
que invocar todos los delegados para el evento. Los de todas las clases, base
o heredera.

Solo dejarían de invocarse los delegados, en el caso de que sobreescribas el
método OnKeyDown, y olvides llamar a base.OnKeyDown(). Pero no necesitas
sobrescribir el OnKeyDown, basta con que proceses el evento.

¿Me explico? ¿Te he entendido?

Juan Carlos Badiola Saiz
MVP - C#
Respuesta Responder a este mensaje
#10 yego
15/06/2005 - 18:16 | Informe spam
Seguramente el problema sea mio que me explico como el culo.
El caso es que sí que se esta saltando el evento del control formado por los
otros controles. Realmente yo no he tocado nada de código, bueno sólo la
implementación interna dentro del mismo, el resto me lo genera
automaticamente.
He intentado tocarlo como tu dices quitando el manejador del evento de la
base, pero se me va a la base 'control'.
Lo voy a aparcar, porque me está consumiendo mucho tiempo y también gran
parte del vuestro.

Gracias de todas formas.



"Tristan" escribió en el mensaje
news:
Ummm, sigo sin tener claro lo que quieres :-(

Al principio entendí una cosa, después la contraria, y ahora otra vez
entiendo la primera:

> pero que
> ocurre; que cuando se pulsa el [F9] es el evento del ComponenteT el que
> primero se dispara e ignora el evento implementado en el propio control
> ComponenteCC. Incluso para cada uno de los ComponentesT que forman el
> ComponenteCC, he implementado de nuevo el código del Evento keydown,


pero
> sigue saltándoselo. Hago que todos los eventos para el keypress tiren


del
> mismo delegado, el keypress de ComponenteCC pero sigue saltándoselo.

No tiene por que saltarse ningún delegado. Cuando pulses la tecla, se


tienen
que invocar todos los delegados para el evento. Los de todas las clases,


base
o heredera.

Solo dejarían de invocarse los delegados, en el caso de que sobreescribas


el
método OnKeyDown, y olvides llamar a base.OnKeyDown(). Pero no necesitas
sobrescribir el OnKeyDown, basta con que proceses el evento.

¿Me explico? ¿Te he entendido?

Juan Carlos Badiola Saiz
MVP - C#
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida