Clases y Objetos

17/05/2005 - 16:59 por SpDFox | Informe spam
Hola todos.

He creado una clase basada en un UserControl, le he agregado 2 botones.
Hasta aquí todo bien.

Luego cree un formulario y le agregue una instancia de la clase que cree,
pero como hago si quiero programar algo en los botones que agregue a la
clase???

Saludos...

Ing. David Amador Tapia
WebMaster "La Web de Davphantom"
www.davphantom.net
Cartagena. Colombia

Preguntas similare

Leer las respuestas

#6 Eduardo A. Morcillo [MS MVP VB]
17/05/2005 - 19:27 | Informe spam
declararos como public...



Nada de declararlos Public!!! Declararlos como publicos rompe la
encapsulacion y seria un mal diseño. La forma correcta seria declarar
eventos en el UserControl que se lancen como respuesta a los eventos de los
botones, es decir, lo que has hecho en el ultimo mensaje (aunque tiene
algunos problemitas ese codigo). Y lo mismo seria para setear propiedades y
ejecutar metodos.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#7 Carlos Gómez
17/05/2005 - 19:42 | Informe spam
Si, estoy totalmente de acuerdo con Ud., me refería en ese mensaje a que
decrarara las propiedades a las que pensaba quería acceder como publicas, o
si quisiera acceder a todas, el botón en sí como públic property. No imaginé
que quería acceder a los eventos de los botones, porque creí (mea culpa)
que la acción de pulsar sobre el botón sería gestionada por el mismo
userControl, y no por el formulario en el que se encuentra.

Por cierto, ¿que problemillas tiene el código?


"Eduardo A. Morcillo [MS MVP VB]" <emorcillo .AT. mvps.org> escribió en el
mensaje news:
declararos como public...



Nada de declararlos Public!!! Declararlos como publicos rompe la
encapsulacion y seria un mal diseño. La forma correcta seria declarar
eventos en el UserControl que se lancen como respuesta a los eventos de
los botones, es decir, lo que has hecho en el ultimo mensaje (aunque tiene
algunos problemitas ese codigo). Y lo mismo seria para setear propiedades
y ejecutar metodos.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo


Respuesta Responder a este mensaje
#8 Eduardo A. Morcillo [MS MVP VB]
17/05/2005 - 20:05 | Informe spam
Por cierto, ¿que problemillas tiene el código?



No son grandes cosas, pero si se puede hacer un mejor diseño sin mayor
esfuerzo, por que no hacerlo. Eran estos:

1) La declaracion de los eventos. Hubiera sido mejor usar un Delegado dado
que los eventos son iguales. Sino VB automaticamente crea un delegado para
cada evento. Por ejemplo (EventHandler es el delegado usado por el evento
Click de los controles pero podria ser uno):

Event Boton1Click As EventHandler
Event Boton2Click As EventHandler

2) Digamos que poner 2 propiedades que devuelvan las instancias de los
botones no soluciona el problema de encapsulamiento.

3) En los RaiseEvent pasas el sender que recibes de los eventos de los
botones al evento del UserControl. Desde el punto de vista del codigo que
usa el UserControl, en el evento, sender deberia tener una referencia al UC
que genero el evento y no el control dentro del UC que lo genero. Es decir,
la llamada deberia ser:

RaiseEvent Boton1Click(Me, e)

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#9 David Amador T.
17/05/2005 - 21:58 | Informe spam
Gracias a ambos por responder.

La verdad no comprendo muy bien,, estoy dando algunos pasos en VB.NET pero
me he dado cuenta que la herencia se maneja bastante complicada.

Tendrían un ejemplo de algo como lo que les comente ???? .. el ejemplo de
Carlos no me funciona.

Saludos..

Ing. David Amador Tapia
WebMaster "La Web de Davphantom"
www.davphantom.net
Cartagena. Colombia


"Eduardo A. Morcillo [MS MVP VB]" <emorcillo .AT. mvps.org> escribió en el
mensaje news:
> Por cierto, ¿que problemillas tiene el código?

No son grandes cosas, pero si se puede hacer un mejor diseño sin mayor
esfuerzo, por que no hacerlo. Eran estos:

1) La declaracion de los eventos. Hubiera sido mejor usar un Delegado dado
que los eventos son iguales. Sino VB automaticamente crea un delegado para
cada evento. Por ejemplo (EventHandler es el delegado usado por el evento
Click de los controles pero podria ser uno):

Event Boton1Click As EventHandler
Event Boton2Click As EventHandler

2) Digamos que poner 2 propiedades que devuelvan las instancias de los
botones no soluciona el problema de encapsulamiento.

3) En los RaiseEvent pasas el sender que recibes de los eventos de los
botones al evento del UserControl. Desde el punto de vista del codigo que
usa el UserControl, en el evento, sender deberia tener una referencia al


UC
que genero el evento y no el control dentro del UC que lo genero. Es


decir,
la llamada deberia ser:

RaiseEvent Boton1Click(Me, e)

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo


Respuesta Responder a este mensaje
#10 Tristan
17/05/2005 - 22:17 | Informe spam
David, en realidad lo que te están comentando Eduardo y Carlos no tiene nada
que ver con la herencia. Se debería hacer exactamente igual en versiones
anteriores de VB. Es simplemente una cuestión de encapsulación, de no
mostrar al exterior la maquinaria interna de los objetos. El código que
tendrías que hacer en VB6 sería prácticamente idéntico.

Lo que necesitas es que tu usercontrol exponga al exterior el evento Click
de sus dos botones. Este evento se invocará cuando se reciba el evento click
del botón respectivo. En realidad el código es el mismo que te ha dado
Eduardo. Lo repito por si no te has fijado bien:

Public Event Click1 As EventHandler
Public Event Click2 As EventHandler

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles
Button1.Click
RaiseEvent Click1(Me, e)
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles
Button2.Click
RaiseEvent Click2(Me, e)
End Sub

Observarás que tu usercontrol dispone de dos eventos nuevos; Click1 y
Click2, que se utilizan como el resto de eventos.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida