enviar mensajes a formularios mdi

29/09/2003 - 17:49 por Oscar Calvo | Informe spam
Hola a todos
tengo un barra de menu en el formulario principal y una serie de formularios
hijos.La barra tiene los botones tipicos de guardar, imprimir etc.quiero que
cuando se pulse sobre "imprimir" se inicie el metodo Frm.imprimir() del
formulario hijo activo en ese momento.La cosa es que no se hacerlo ya que
cuando ejecuto en el formulario principal

Form Frm=FrmPadre.ActiveMdiChild;
Frm.Imprimir();

Cuando hago esto me dice que no es correcto porque no existe el metodo
imprimir() en Frm, cierto porque la propiedad ActiveMdi devuelve una
referencia a form,clase que no tiene ningun metodo imprimir().
Si intento hacer un cast
Form frm=(FrmHijo)FrmPadre.ActiveMdiChild;
Tampoco me deja ya que seria una conversion hacia abajo, ademas esta
solucion tampoco me valdria ya que no se de que clase es exactamente el
formulario activo, solo se que si tiene un metodo imprimir().
Es por esto que no se como enviarle un mensaje al formulario hijo.Podria
redefinir el metodo ActiveMdi() para que devolviera una referencia a una
clase creada por mi llamada FrmBase, hacer que esta clase tuviera el metodo
imprimir() y heredar de ella todos los formularios hijos de la aplicacion,
pero me parece muy lioso ya que no sabria ni como hacer para que ActiveMdi
me devolviera el Form activo.Ademas creo que este caso es muy usual, asi que
supongo que debe de haber una solucion mucho basica.
Tambien me han dado una solucion que era hacer una clase estatica con los
metos imprimir(),guardar() etc, y llamarla desde la barra de menu.Pero esto
me parece un mal diseño ya que quiero que cada formulario tenga su propios
metodos, y ademas de este modo cada vez que se pulsara tendria que andar
comprobando cual es el form mdi activo y ejecutar el codigo
correspondiente.Vamos, que no me gusta lo mas minimo, no se que pensareis .

Estoy seguro que esto lo solucionais vosotros de otra manera, ya que debe
ser usual.pero no pienso como

Espero haberme explicado bien,
Gracias y un saludo.
 

Leer las respuestas

#1 Federico Villafañes
30/09/2003 - 21:50 | Informe spam
Es que para eso justamente son los interfaces. De esta forma, te
aseguras que una clase implementa determinado metodo y lo
puedes llamar con seguridad...

Federico


"Oscar Calvo" escribió en el mensaje
news:uBT#
Ya lo he probado y aunque funciona, no es lo que queria porque de esa


manera
tengo que saber siempre de que tipo es el form activo para asi hacer la
conversion, con lo cual tendria que meter un monton de


condicionales.Gracias
de todos modos

De todas formas ya lo he solucionado, al final lo he hecho con interfaces


y
la solucion me convence bastante.

Vuelvo a darte las gracias.Un saludo
"Leonardo Moreno Forero" escribió en el mensaje
news:
> Por que no pruebas lo siguiente:
>
> FrmHijo frm = (FrmHijo)FrmPadre.ActiveMdiChild;
> frm.Imprimir();
>
> Obviamente el método Imprimir debe ser público, para que el objeto


padre
> tenga acceso a este. Preferiblemente no utilizar médotos estáticos en


este
> caso, por que un método estático está definido para toda la clase y me
> imagino que cada ventana mdi tiene sus propios datos.
>
> Atentamente,
>
> Leonardo Moreno Forero
> MCP - MCSD
> Bogotá - Colombia
>
> "Oscar Calvo" escribió en el mensaje
> news:%
> > Hola a todos
> > tengo un barra de menu en el formulario principal y una serie de
> formularios
> > hijos.La barra tiene los botones tipicos de guardar, imprimir


etc.quiero
> que
> > cuando se pulse sobre "imprimir" se inicie el metodo Frm.imprimir()


del
> > formulario hijo activo en ese momento.La cosa es que no se hacerlo ya
que
> > cuando ejecuto en el formulario principal
> >
> > Form Frm=FrmPadre.ActiveMdiChild;
> > Frm.Imprimir();
> >
> > Cuando hago esto me dice que no es correcto porque no existe el metodo
> > imprimir() en Frm, cierto porque la propiedad ActiveMdi devuelve una
> > referencia a form,clase que no tiene ningun metodo imprimir().
> > Si intento hacer un cast
> > Form frm=(FrmHijo)FrmPadre.ActiveMdiChild;
> > Tampoco me deja ya que seria una conversion hacia abajo, ademas esta
> > solucion tampoco me valdria ya que no se de que clase es exactamente


el
> > formulario activo, solo se que si tiene un metodo imprimir().
> > Es por esto que no se como enviarle un mensaje al formulario


hijo.Podria
> > redefinir el metodo ActiveMdi() para que devolviera una referencia a


una
> > clase creada por mi llamada FrmBase, hacer que esta clase tuviera el
> metodo
> > imprimir() y heredar de ella todos los formularios hijos de la
aplicacion,
> > pero me parece muy lioso ya que no sabria ni como hacer para que
ActiveMdi
> > me devolviera el Form activo.Ademas creo que este caso es muy usual,


asi
> que
> > supongo que debe de haber una solucion mucho basica.
> > Tambien me han dado una solucion que era hacer una clase estatica con
los
> > metos imprimir(),guardar() etc, y llamarla desde la barra de menu.Pero
> esto
> > me parece un mal diseño ya que quiero que cada formulario tenga su
propios
> > metodos, y ademas de este modo cada vez que se pulsara tendria que


andar
> > comprobando cual es el form mdi activo y ejecutar el codigo
> > correspondiente.Vamos, que no me gusta lo mas minimo, no se que
pensareis
> .
> >
> > Estoy seguro que esto lo solucionais vosotros de otra manera, ya que
debe
> > ser usual.pero no pienso como
> >
> > Espero haberme explicado bien,
> > Gracias y un saludo.
> >
> >
> >
>
>


Preguntas similares