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

#11 David Amador T.
17/05/2005 - 22:36 | Informe spam
Gracias Juan Carlos por la explicación. Ya comprendi.

Pero me esta pasando algo curioso; en el formulario donde creo la instancia
del UserControl los objetos de este no son visibles... ¿Porque?

Saludos..

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


"Tristan" escribió en el mensaje
news:
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
#12 Tristan
17/05/2005 - 23:04 | Informe spam
¿Te refieres a los objetos del usercontrol?.

Pero es que precisamente que se viesen sería incorrecto. A eso se refería
Eduardo al hablar de encapsulación. Un objeto no debe dejar ver su mecánica
interna. ¿Por qué?. Pues por que a cambio de ahorrar unas pocas lineas de
código, cuando modifiques el interior del objeto tendrás que modificar todas
las aplicaciones que lo utilicen. ¿Que pasaría si tu botón deja de ser un
botón y lo sustituyes por otra cosa?

Pero en realidad probablemente si tienes acceso a los objetos del
UserControl, al menos si no has modificado el tipo de acceso por defecto. Al
estar declarados como Friend, puedes acceder a ellos desde cualquier clase
del ensamblado (proyecto) actual. Si tu formulario y tu control de usuario
están en el mismo ensamblado, tendrás acceso a sus controles internos. Si
has definido tu control en un ensamblado (dll) distinto, no tendrás acceso a
ellos.

Para acceder a tus botones sería así:

tuUserControl1.Button1.Text = "No se debe hacer!!!!!!"

Pero claro, estarás de acuerdo en que es una barbaridad que una aplicación
pueda cambiar el texto de los botones de tu control, ¿no?. En realidad yo
cambiaría la propiedad Modifiers de los controles internos para que sean
privados.

Cualquier acceso desde el exterior a un objeto interno, debe definirse como
una propiedad, método o evento de tu control de usuario, ya sea creando uno
nuevo o sobreescribiendo (override) los que existan.

Juan Carlos Badiola
MVP - C#
Respuesta Responder a este mensaje
#13 Eduardo A. Morcillo [MS MVP VB]
17/05/2005 - 23:25 | Informe spam
Me parece que dice que no ve los controles en el diseñador cuando agrega el
control al formulario. Pueden ser varias cosas. Una que los controles esten
fuera del rectangulo ocupado por el UC y por lo tanto no se vean. Otra
posibilidad es que no hayas vuelto a compilar el proyecto luego de agregar
los controles al UC. A diferencia de VB6 el diseñador de .net necesita la
version compilada de los controles para mostrarlos.

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
Respuesta Responder a este mensaje
#14 David Amador T.
18/05/2005 - 00:12 | Informe spam
Encontre el detalle!!!! ... habia omitido lo siguiente

Public Sub New()
MyBase.New()

InitializeComponent()
End Sub

Y por eso no se creaban los objetos en el Formulario.

Gracias de nuevo por ayudarme a trabajar con este tipo de controles. Yo
desarrollo es en Visual Fox Pro y algunas cosas son más sencillas con este
lenguaje.

Slaudos..
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:%
Me parece que dice que no ve los controles en el diseñador cuando agrega


el
control al formulario. Pueden ser varias cosas. Una que los controles


esten
fuera del rectangulo ocupado por el UC y por lo tanto no se vean. Otra
posibilidad es que no hayas vuelto a compilar el proyecto luego de agregar
los controles al UC. A diferencia de VB6 el diseñador de .net necesita la
version compilada de los controles para mostrarlos.

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


Respuesta Responder a este mensaje
#15 Carlos Gómez
18/05/2005 - 00:32 | Informe spam
Ok, Tiene toda la razón en los tres puntos.
Gracias por la aclaración.


"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


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