Como ejecutar un metodo en MDIForm desde Form1

18/10/2006 - 02:22 por edcha | Informe spam
El asunto es que tengo un MDIForm con un metodo que me cambia todo el
texto en los menus y botones de éste si la persona selecciona en el
Form1 un Checkbox, como pueden ver el Form1 lo estoy usando como si
fuera un formulario para cambiar las propiedades del MDIForm pero
resulta que por mas que lo he intentado y he buscado en la red no
encuentro solución, lo tengo asi:

Inicio el MDIForm desde "MainClass.cs" asi:
Application.Run(new MainForm());

En el MainForm que es el MDIForm esta el siguiente metodo:
public void CambiarPropiedad()
{
//Cambiar el texto de todo en el MDIForm
}

Inicio el Form1 desde un boton del MainForm asi:
Form1 m_FormProp = new Form1();
m_FormProp.ShowDialog();

Ahora una vez que la persona seleccina lo que quiere en el Form1 cambia
el texto en el form1 y DEBE CAMBIARLO DE UNA VEZ en el MDIForm
"MainForm"

//Priemero cambia en el form1 el texto
//instancio el MDIForm asi
MainForm m_MDIForm = new MainForm();
m_MDIForm.CambiarPropiedad();

Pero resulta que aunque recorre todo el codigo que esta en el metodo
CambiarPropiedad() no efectua los cambios.

Mi conclucion:
El asunto es que estoy creando un nuevo objeto MDIForm y ejecutando el
metodo en este pero no en el objeto MDIForm que ya esta abierto
¿Entonces como hago para ejecutar el metodo del MDIForm que ya esta
abierto?

Gracias por la ayuda.
 

Leer las respuestas

#1 Alberto Poblacion [MVP]
18/10/2006 - 08:35 | Informe spam
"edcha" wrote in message
news:
Mi conclucion:
El asunto es que estoy creando un nuevo objeto MDIForm y ejecutando el
metodo en este pero no en el objeto MDIForm que ya esta abierto
¿Entonces como hago para ejecutar el metodo del MDIForm que ya esta
abierto?



No tienes más remedio que hacerle llegar el Form1 una referencia al
MDIForm original para llamar al procedimiento a través de ella. Lo más
elegante es pasársela en el constructor:

Inicio el Form1 desde un boton del MainForm asi:


Form1 m_FormProp = new Form1(this);
m_FormProp.ShowDialog();

Observa el "this" que hemos metido en el "new" de Form1. Como esta
instrucción está dentro del MDIForm, "this" es una referencia al propio
MDIForm, y se la hacemos llegar a Form1. En Form1 la recogemos en el
constructor:

private MainForm m_MDIForm;
public Form1(MainForm mf)
{
m_MDIForm=mf;
}

Y luego, cuando tengas que llamar al CambiarPropiedad() lo llamas a
través de esta referencia:

m_MDIForm.CambiarPropiedad();

Preguntas similares