Herencia.

27/05/2005 - 17:37 por Fabian | Informe spam
Hola, a todos.

Estoy tratando de dasarrollar mi primer sistema en VB.net y estoy viendo
cada uno de los componentes.
Ahora quiero hacer mi formulario base con unos botones. y quier que estos
botones tenagan eventos. pero
en mis nuevos formulario que heredo del Base queiro agregar funcionalidad a
esos eventos.

Ejemplo

Boton gtabar en Formulario Base

Private Sub BNuevo_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles BNuevo.Click
nuevo()
End Sub
Private Sub nuevo() MessageBox.Show("Nuevo")
BNuevo.Enabled = False
BGrabar.Enabled = True
BModificar.Enabled = False
BBorrar.Enabled = False
End Sub


Ahora yo quiero en mi formulario poder poner mas eventos en Nuevo, pero no
se como

se puede??'

Gracias Fabian
 

Leer las respuestas

#1 Tristan
27/05/2005 - 23:57 | Informe spam
Para contestar a tu pregunta es necesario aclarar algo primero. Hay dos
forma de definir eventos en vb.net.

- Declarar el objeto como WithEvents. Si lo declaras así, el IDE de vs.net
te muestra un listado con los eventos del objeto, y crea de forma automática
la rutina de tratamiento del evento.

- Utilizar la sentencia AddHandler. Esta sentencia permite añadir un
delegado al tratamiento de evento de un objeto.

La sentencia WithEvents tiene muchas limitaciones. Como única ventaja la que
he dicho antes, facilidad. El IDE muestra la lista de eventos y crea la
rutina de forma automática.

Por el contrario, AddHandler no tiene ninguna limitación a la hora de tratar
eventos del formulario padre. Tienes muchos ejemplos de como funciona
AddHandler. Es necesaria para trabajar con arrays de controles que manejen
eventos, así es que conviene conocerla.

Precisamente una de las limitaciones de WithEvents (o más bien del IDE) es
que solo funciona dentro de la clase, no en las clases herederas. La ayuda
para crear eventos desaparece si el objeto está definido en la clase padre.
Ahora bien, hay una forma de saltarse esa limitación: Reintroducir una nueva
referencia WithEvents en la clase hija. Es decir:

Si en el padre existe un control Button1, podemos incluir en el formulario
hijo este código:

Friend Shadows WithEvents Button1 as Button = MyBase.Button1

Esta sentencia no consume recursos, puesto que como debes saber, los objetos
son solo referencias. Con esa linea en tu formulario hijo el IDE mostrará
los eventos de TextBox1, y todo funcionará como esperabas.

Ten siempre en cuenta que los eventos funcionan por adición, no se
sobreescriben. Si tratas el mismo evento en el padre y en el hijo se
ejecutarán las dos acciones.

Nota:
Por esas y otras limitaciones de AddHandler, no creo que haya sido acertada
la idea de mantener WithEvents en vb.net. Con un IDE adecuado, AddHandler
haría lo mismo. Así funciona en C#. Si estuviese en mis manos, hubiese
mantenido WithEvents solo por compatibilidad, pero programado el diseñador
de windows forms para que los eventos se basen en AddHandler y no en
WithEvents. Si se hubiese hecho el caso que planteas no tendría ninguna
dificultad.

Juan Carlos Badiola
MVP - C#

Preguntas similares