Problema con herencia visual

23/02/2007 - 17:37 por Alberto | Informe spam
Tengo un control de usuario (form) que maneja el evento KeyDown.

El problema surge cuando se crea una ficha descendiente de esta e intenta
manejar el mismo evento ya que observo que primero se ejecuta el código del
formulario base y después el de la propia ficha.

La única solución que le encontré fue la siguiente:
1) No asignar el evento KeyDown al método en el formulario base.
2) Hacerlo virtual.
3) En las fichas descendientes crear un override de dicho método y
asignárselo al evento KeyDown. Aquí, si interesa, se puede llamar al código
de la ficha base.

El problema es que lo veo muy complicado y, además, si una ficha
descendiente no quiere hacer nada como respuesta al KeyDown, tiene que crear
la sobrecarga del método para éste tenga efecto.

¿Le veis alguna solución?
Muchas gracias

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
23/02/2007 - 18:00 | Informe spam
"Alberto" wrote in message
news:
El problema surge cuando se crea una ficha descendiente de esta e intenta
manejar el mismo evento ya que observo que primero se ejecuta el código
del formulario base y después el de la propia ficha.

La única solución que le encontré fue la siguiente:
1) No asignar el evento KeyDown al método en el formulario base.
2) Hacerlo virtual.
3) En las fichas descendientes crear un override de dicho método y
asignárselo al evento KeyDown. Aquí, si interesa, se puede llamar al
código de la ficha base.

El problema es que lo veo muy complicado y, además, si una ficha
descendiente no quiere hacer nada como respuesta al KeyDown, tiene que
crear la sobrecarga del método para éste tenga efecto.

¿Le veis alguna solución?




En el formulario base, el evento KeyDown se asigna al método OnKeyDown.
Este método se hace virtual, y contiene el comportamiento predefinido que
debe tener el formulario base cuando se produce el evento.
En los formularios descendientes, si se desea no hacer nada en respuesta
al evento, se hace un override del OnKeyDown y se deja vacío. Si se desea
hacer algo, se escribe dentro del override, y si después se necesita llamar
al comportamiento del formulario base, se añade una llamada a
base.OnKeyDown.
Respuesta Responder a este mensaje
#2 Alberto
23/02/2007 - 18:55 | Informe spam
Ahora no estoy delante de la aplicación y no lo puedo probar pero observé
que que cuando se dispara el evento, primero ejecuta el método de la ficha
base y después el de la ficha descendiente. Precisamente por eso tuve que
romper el vínculo entre el evento y el método en el formulario base.

"Alberto Poblacion"
escribió en el mensaje news:%
"Alberto" wrote in message
news:
El problema surge cuando se crea una ficha descendiente de esta e intenta
manejar el mismo evento ya que observo que primero se ejecuta el código
del formulario base y después el de la propia ficha.

La única solución que le encontré fue la siguiente:
1) No asignar el evento KeyDown al método en el formulario base.
2) Hacerlo virtual.
3) En las fichas descendientes crear un override de dicho método y
asignárselo al evento KeyDown. Aquí, si interesa, se puede llamar al
código de la ficha base.

El problema es que lo veo muy complicado y, además, si una ficha
descendiente no quiere hacer nada como respuesta al KeyDown, tiene que
crear la sobrecarga del método para éste tenga efecto.

¿Le veis alguna solución?




En el formulario base, el evento KeyDown se asigna al método OnKeyDown.
Este método se hace virtual, y contiene el comportamiento predefinido que
debe tener el formulario base cuando se produce el evento.
En los formularios descendientes, si se desea no hacer nada en respuesta
al evento, se hace un override del OnKeyDown y se deja vacío. Si se desea
hacer algo, se escribe dentro del override, y si después se necesita
llamar al comportamiento del formulario base, se añade una llamada a
base.OnKeyDown.



Respuesta Responder a este mensaje
#3 Alberto Poblacion
23/02/2007 - 19:19 | Informe spam
"Alberto" wrote in message
news:%
Ahora no estoy delante de la aplicación y no lo puedo probar pero observé
que que cuando se dispara el evento, primero ejecuta el método de la ficha
base y después el de la ficha descendiente. Precisamente por eso tuve que
romper el vínculo entre el evento y el método en el formulario base.



Si en las dos conectas el evento, efectivamente te ocurre eso. Pero lo
que yo digo es conectarlo SOLO en la ficha base, y en la hija en lugar de
conectar el evento, hacer un override de la rutina a la que ya está
conectado el evento en la clase base.
Respuesta Responder a este mensaje
#4 Alberto
23/02/2007 - 21:19 | Informe spam
Ahora te entiendo. Muchas gracias.

"Alberto Poblacion"
escribió en el mensaje news:%
"Alberto" wrote in message
news:%
Ahora no estoy delante de la aplicación y no lo puedo probar pero observé
que que cuando se dispara el evento, primero ejecuta el método de la
ficha base y después el de la ficha descendiente. Precisamente por eso
tuve que romper el vínculo entre el evento y el método en el formulario
base.



Si en las dos conectas el evento, efectivamente te ocurre eso. Pero lo
que yo digo es conectarlo SOLO en la ficha base, y en la hija en lugar de
conectar el evento, hacer un override de la rutina a la que ya está
conectado el evento en la clase base.


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