Como determinar a que objeto form pertenece el Control?

19/01/2007 - 07:03 por Daniel R. Rossnagel | Informe spam
Tengo un control creado, que tiene que utilizar determinados metodos segun
sea el formulario al que pertenezca,
el problema es que no se como poder determinar desde dentro de los metodos
de este control a que formulario pertenece.

Desde ya gracias por su atencion

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
19/01/2007 - 08:17 | Informe spam
"Daniel R. Rossnagel" wrote in message
news:uME2A%
Tengo un control creado, que tiene que utilizar determinados metodos segun
sea el formulario al que pertenezca,
el problema es que no se como poder determinar desde dentro de los metodos
de este control a que formulario pertenece.



Tienes el método FindForm() del control, que te devuelve el formulario
en el que está ubicado. También existe la propiedad Container, que te dice
el contenedor inmediato, que podría no ser el form en caso de que el control
esté, por ejemplo, dentro de un groupbox.
Respuesta Responder a este mensaje
#2 Daniel R. Rossnagel
22/01/2007 - 05:26 | Informe spam
El problema es un poco mas complicado ya q en realidad es un Componente ,
algo parecido al bindingsource, no tengo el metodo FindForm y la propiedad
Container siempre me retorna null alguna otra idea sugerencia,
Estuve utilzando System.Windows.Forms.Form.ActiveForm ,pero tengo el
problema que complica al utilizar el depurador, por lo tanto quedo
descartada esta opcion


"Alberto Poblacion"
escribió en el mensaje news:

"Daniel R. Rossnagel" wrote in message
news:uME2A%
Tengo un control creado, que tiene que utilizar determinados metodos
segun sea el formulario al que pertenezca,
el problema es que no se como poder determinar desde dentro de los
metodos de este control a que formulario pertenece.



Tienes el método FindForm() del control, que te devuelve el formulario
en el que está ubicado. También existe la propiedad Container, que te dice
el contenedor inmediato, que podría no ser el form en caso de que el
control esté, por ejemplo, dentro de un groupbox.


Respuesta Responder a este mensaje
#3 Alberto Poblacion
22/01/2007 - 09:32 | Informe spam
"Daniel R. Rossnagel" wrote in message
news:%
El problema es un poco mas complicado ya q en realidad es un Componente ,
algo parecido al bindingsource, no tengo el metodo FindForm y la propiedad
Container siempre me retorna null alguna otra idea sugerencia,
Estuve utilzando System.Windows.Forms.Form.ActiveForm ,pero tengo el
problema que complica al utilizar el depurador, por lo tanto quedo
descartada esta opcion



Entiendo entonces que has hecho una clase que hereda de
System.ComponentModel.Component. Aunque no lo he probado, según la
documentación la propiedad Container devuelve el IContainer en el que se
ubica el componente, o null si el componente no está ubicado en un
IContainer. Puesto que te está devolviendo null, parece deducirse que no
está debidamente ubicado. ¿Qué has hecho para que el Form "contenga" el
componente?
Respuesta Responder a este mensaje
#4 Alberto Poblacion
22/01/2007 - 17:58 | Informe spam
"Daniel R. Rossnagel" wrote in message
news:
[...] y este lo crea en el designner de la siguiente forma
paisProvinciaEstadoCiudadBusnessRole1 = new miComponente()
private miComponente paisProvinciaEstadoCiudadBusnessRole1;



Vale, solo le hace un new y no hace un Add para añadirlo a ningún
contenedor, y por eso la propiedad Container siempre te devuelve null.
Creando un componente de esa manera (haciéndole solamente un new) no hay
forma (que yo sepa) de saber desde dentro del objeto cuál es la clase que lo
ha creado.

Necesito poder determinar el formulario al que pertenece
el componente para poder ejecutar el metodo Validate(),
por un incoinvente q tengo al grabar los datos



Tendrás que pasarle desde el formulario al componente algún dato que le
permita saber quién lo contiene. Podrías poner en el componente una
propiedad pública que sea "Formulario", y pasarle el "this" a esa propiedad
desde el formulario después de hacer el new. O podrías pasar como argumento
el formulario en el constructor del componente.

Si lo haces así, y los varios formularios que llaman al componente no
heredan de un formulario común que tenga el método Validate (o implementan
todos un Interface que contenga el Validate), tendrás dificultades para
llamar a este método desde el componente (ya que si le pasas como argumento
un tipo Form, al intentar llamar al Validate te dirá que este objeto no
contiene un método Validate). Tendrás que recurrir a usar Reflexión para
solucionarlo, cosa un poco molesta. Como alternativa más elegante, te
sugiero publicar un evento en el componente, y desde el formulario suscribir
al evento el método Validate después de hacer el new del componente. El
componente no tiene más que disparar el evento cuando quiera llamar al
Validate del formulario.
Respuesta Responder a este mensaje
#5 Daniel R. Rossnagel
22/01/2007 - 20:37 | Informe spam
Ok, Gracias por tu atencion... tendre que trabjar no queda otra.

"Alberto Poblacion"
escribió en el mensaje news:
"Daniel R. Rossnagel" wrote in message
news:
[...] y este lo crea en el designner de la siguiente forma
paisProvinciaEstadoCiudadBusnessRole1 = new miComponente()
private miComponente paisProvinciaEstadoCiudadBusnessRole1;



Vale, solo le hace un new y no hace un Add para añadirlo a ningún
contenedor, y por eso la propiedad Container siempre te devuelve null.
Creando un componente de esa manera (haciéndole solamente un new) no hay
forma (que yo sepa) de saber desde dentro del objeto cuál es la clase que
lo ha creado.

Necesito poder determinar el formulario al que pertenece
el componente para poder ejecutar el metodo Validate(),
por un incoinvente q tengo al grabar los datos



Tendrás que pasarle desde el formulario al componente algún dato que le
permita saber quién lo contiene. Podrías poner en el componente una
propiedad pública que sea "Formulario", y pasarle el "this" a esa
propiedad desde el formulario después de hacer el new. O podrías pasar
como argumento el formulario en el constructor del componente.

Si lo haces así, y los varios formularios que llaman al componente no
heredan de un formulario común que tenga el método Validate (o implementan
todos un Interface que contenga el Validate), tendrás dificultades para
llamar a este método desde el componente (ya que si le pasas como
argumento un tipo Form, al intentar llamar al Validate te dirá que este
objeto no contiene un método Validate). Tendrás que recurrir a usar
Reflexión para solucionarlo, cosa un poco molesta. Como alternativa más
elegante, te sugiero publicar un evento en el componente, y desde el
formulario suscribir al evento el método Validate después de hacer el new
del componente. El componente no tiene más que disparar el evento cuando
quiera llamar al Validate del formulario.



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