Las clases

03/02/2005 - 19:06 por Manuel | Informe spam
Hola, saludos al foro

Estoy con el tema de las clases (aprendiendo, claro) llevo
bastante bien lo de crear propiedades, metodos y eventos
pero tengo un par de dudas que me gustaria exponer:

He creado una clase que crea, en tiempo de ejecucion, un
objeto label en un formulario. La cuestion es que no se
como crear un parametro en la clase para especificar el
control contenedor de la clase.

Por ejemplo, quiero que mi clase (label) se cree en el
form1 (que esta fuera de la clase), ¿que tipo de dato sera
esa propiedad y como la escribo?


por otra parte, una vez escrita la clase declaro una
instancia de la misma en un formulario así:

private withevenst lbl as miclase_label


lbl = new miclase_label
...

.. y para controlar los eventos ..
private sub lbl_click () handles lbl.click

..hasta aqui todo correcto, pero.. si yo quiero tener
muchas clases miclase_label en el formulario ¿tengo que
declarar una variable withevents por cada clase? ¿y si a
priori no se la cantidad que voy a necesitar?

espero haberme explicado
perdon por el ladrillo y gracias

Preguntas similare

Leer las respuestas

#1 Edgar Contreras
03/02/2005 - 19:35 | Informe spam
Que tal Manuel,

En cuanto al tipo de Propiedad se me ocurre que la hagas del tipo Object, ya
que a final de cuentas todas las clases de .NET heredan de esta, por lo que
la asignacion al final podría realizarse sin problemas.

En lo que respecta a los eventos, puedes también atrapar los eventos
mediante el AddHandler, por ejemplo:

<Codigo ON>
Class MiClase
Event RegistrarAccion (ByVal nombreAccion as String)
.
.
.
Sub AbrirArchivo()
RaiseEvent RegistrarAccion("AbrirArchivo")
End Sub

Sub CerrarArchivo()
RaiseEvent RegistrarAccion("CerrarArchivo")
End Sub

End Class

'En tu formulario, modulo, o donde quieras crear los objetos, puedes agregar
algo como
dim miObj as MiClase

Sub AgregaHandlerDeEventos()
AddHandler miObj.RegistrarAccion, AddressOf RegistroDeAccionesMiClase
.
.
.
'Provocamos un suceso
miObj.AbrirArchivo()
miObj.CerrarArchivo()
End Sub

Sub RegistroDeAccionesMiClase(ByVal nombreAccion as String)
Console.WriteLine("Evento RegistrarAccion: " & nombreAccion)
End Sub

'Quitamos la referencia al final
Sub QuitaHandlerDeEventos()
RemoveHandler miObj.RegistrarAccion, AddressOf RegistroDeAccionesMiClase
End Sub

<Codigo OFF>

Espero que te ayude.


Saludos,

Edgar Contreras


[Conectado desde Tijuana, B.C. México]

DISCLAIMER: La información es presentada como es, sin ninguna
responsabilidad, sin garantía alguna y no otorga
derecho alguno.



"Manuel" wrote in message
news:000f01c50a1b$0909a930$
Hola, saludos al foro

Estoy con el tema de las clases (aprendiendo, claro) llevo
bastante bien lo de crear propiedades, metodos y eventos
pero tengo un par de dudas que me gustaria exponer:

He creado una clase que crea, en tiempo de ejecucion, un
objeto label en un formulario. La cuestion es que no se
como crear un parametro en la clase para especificar el
control contenedor de la clase.

Por ejemplo, quiero que mi clase (label) se cree en el
form1 (que esta fuera de la clase), ¿que tipo de dato sera
esa propiedad y como la escribo?


por otra parte, una vez escrita la clase declaro una
instancia de la misma en un formulario así:

private withevenst lbl as miclase_label


lbl = new miclase_label
...

.. y para controlar los eventos ..
private sub lbl_click () handles lbl.click

..hasta aqui todo correcto, pero.. si yo quiero tener
muchas clases miclase_label en el formulario ¿tengo que
declarar una variable withevents por cada clase? ¿y si a
priori no se la cantidad que voy a necesitar?

espero haberme explicado
perdon por el ladrillo y gracias
Respuesta Responder a este mensaje
#2 Anonimo
03/02/2005 - 19:46 | Informe spam
Hola, Edgar

En cuanto al tipo de propiedad, la he puesto como object.
Pero al intentar escribirla desde el formulario

lbl.contenedor=form1

esto no va

en cuanto al número de instancias de la clase, la duda que
tengo es si necesito crear tantas variables withevents a
nivel de modulo como instancias de la clase desee o si
existe alguna otra forma.

es decir, si yo quiero 3 instancias de miclase_label
tengo que hacer:

private withevents lbl1 as miclase_label
private withevents lbl2 as miclase_label
private withevents lbl3 as miclase_label

y si quiero 500? tengo que hacer 500 declaraciones?

muchas gracias por tu tiempo y un saludo
Manuel González



Que tal Manuel,

En cuanto al tipo de Propiedad se me ocurre que la hagas


del tipo Object, ya
que a final de cuentas todas las clases de .NET heredan


de esta, por lo que
la asignacion al final podría realizarse sin problemas.

En lo que respecta a los eventos, puedes también atrapar


los eventos
mediante el AddHandler, por ejemplo:

<Codigo ON>
Class MiClase
Event RegistrarAccion (ByVal nombreAccion as String)
.
.
.
Sub AbrirArchivo()
RaiseEvent RegistrarAccion("AbrirArchivo")
End Sub

Sub CerrarArchivo()
RaiseEvent RegistrarAccion("CerrarArchivo")
End Sub

End Class

'En tu formulario, modulo, o donde quieras crear los


objetos, puedes agregar
algo como
dim miObj as MiClase

Sub AgregaHandlerDeEventos()
AddHandler miObj.RegistrarAccion, AddressOf


RegistroDeAccionesMiClase
.
.
.
'Provocamos un suceso
miObj.AbrirArchivo()
miObj.CerrarArchivo()
End Sub

Sub RegistroDeAccionesMiClase(ByVal nombreAccion as


String)
Console.WriteLine("Evento RegistrarAccion: " &


nombreAccion)
End Sub

'Quitamos la referencia al final
Sub QuitaHandlerDeEventos()
RemoveHandler miObj.RegistrarAccion, AddressOf


RegistroDeAccionesMiClase
End Sub

<Codigo OFF>

Espero que te ayude.


Saludos,

Edgar Contreras


[Conectado desde Tijuana, B.C. México]

DISCLAIMER: La información es presentada como es, sin


ninguna
responsabilidad, sin garantía


alguna y no otorga
derecho alguno.



"Manuel" wrote in


message
news:000f01c50a1b$0909a930$
Hola, saludos al foro

Estoy con el tema de las clases (aprendiendo, claro) llevo
bastante bien lo de crear propiedades, metodos y eventos
pero tengo un par de dudas que me gustaria exponer:

He creado una clase que crea, en tiempo de ejecucion, un
objeto label en un formulario. La cuestion es que no se
como crear un parametro en la clase para especificar el
control contenedor de la clase.

Por ejemplo, quiero que mi clase (label) se cree en el
form1 (que esta fuera de la clase), ¿que tipo de dato sera
esa propiedad y como la escribo?


por otra parte, una vez escrita la clase declaro una
instancia de la misma en un formulario así:

private withevenst lbl as miclase_label

.
lbl = new miclase_label


... y para controlar los eventos ..
private sub lbl_click () handles lbl.click

...hasta aqui todo correcto, pero.. si yo quiero tener
muchas clases miclase_label en el formulario ¿tengo que
declarar una variable withevents por cada clase? ¿y si a
priori no se la cantidad que voy a necesitar?

espero haberme explicado
perdon por el ladrillo y gracias






.

Respuesta Responder a este mensaje
#3 Edgar Contreras
03/02/2005 - 20:24 | Informe spam
Ver Entre Lineas

wrote in message
news:10a601c50a20$babcbe10$
Hola, Edgar

En cuanto al tipo de propiedad, la he puesto como object.
Pero al intentar escribirla desde el formulario

lbl.contenedor=form1

esto no va




en cuanto al número de instancias de la clase, la duda que
tengo es si necesito crear tantas variables withevents a
nivel de modulo como instancias de la clase desee o si
existe alguna otra forma.

es decir, si yo quiero 3 instancias de miclase_label
tengo que hacer:

private withevents lbl1 as miclase_label
private withevents lbl2 as miclase_label
private withevents lbl3 as miclase_label

y si quiero 500? tengo que hacer 500 declaraciones?

trabajo puedas hacer que el manejo dinámico de tus controles pueda accesar
al evento que tu le marques... De tal modo te evitas tener que declarar las
variables WithEvents y obtendrías básicamente el mismo efecto. Solo recuerda
que al final del ciclo de vida de cada uno de los controles deberas hacer un
RemoveHandler para no dejar "cabos sueltos"...

muchas gracias por tu tiempo y un saludo
Manuel González



Saludos,

Edgar Contreras


[Conectado desde Tijuana, B.C. México]

DISCLAIMER: La información es presentada como es, sin ninguna
responsabilidad, sin garantía alguna y no otorga
derecho alguno.
Respuesta Responder a este mensaje
#4 Anonimo
04/02/2005 - 12:17 | Informe spam
me ha salido!

para escribir un parametro de tipo object, he declarado
una varible de tipo object y funciona

dim formulario as object=form1
miclase_label.contenedor=formulario

y para crear instancias de la clase y controlar sus eventos

dim a as new miclase_label
addhandles miclase_label_click,etc

y asi creo todas las instancias de la clase que quiera

gracias Edgar, un saludo
Manuel González



Ver Entre Lineas

wrote in message
news:10a601c50a20$babcbe10$
Hola, Edgar

En cuanto al tipo de propiedad, la he puesto como object.
Pero al intentar escribirla desde el formulario

lbl.contenedor=form1

esto no va




va????


en cuanto al número de instancias de la clase, la duda que
tengo es si necesito crear tantas variables withevents a
nivel de modulo como instancias de la clase desee o si
existe alguna otra forma.

es decir, si yo quiero 3 instancias de miclase_label
tengo que hacer:

private withevents lbl1 as miclase_label
private withevents lbl2 as miclase_label
private withevents lbl3 as miclase_label

y si quiero 500? tengo que hacer 500 declaraciones?



quizá con un poco de
trabajo puedas hacer que el manejo dinámico de tus


controles pueda accesar
al evento que tu le marques... De tal modo te evitas


tener que declarar las
variables WithEvents y obtendrías básicamente el mismo


efecto. Solo recuerda
que al final del ciclo de vida de cada uno de los


controles deberas hacer un
RemoveHandler para no dejar "cabos sueltos"...

muchas gracias por tu tiempo y un saludo
Manuel González



Saludos,

Edgar Contreras


[Conectado desde Tijuana, B.C. México]

DISCLAIMER: La información es presentada como es, sin


ninguna
responsabilidad, sin garantía


alguna y no otorga
derecho alguno.




.

Respuesta Responder a este mensaje
#5 Edgar Contreras
04/02/2005 - 19:02 | Informe spam
wrote in message
news:1e7c01c50aab$0f9b5290$
me ha salido!


gracias Edgar, un saludo
Manuel González



Saludos,

Edgar Contreras


[Conectado desde Tijuana, B.C. México]

DISCLAIMER: La información es presentada como es, sin ninguna
responsabilidad, sin garantía alguna y no otorga
derecho alguno.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida