Formularios hijos

11/10/2006 - 14:23 por Ricardo M. | Informe spam
Saludos.
El problema es que tengo un MDI, cuando le hago llamado a un formulario hijo
desde el menu, lo hace, pero el problema es cuando le hago llamado otra vez
al mismo formulario desde el menu, vuelve a montar el mismo formulario y
quisiera que apareciera una sola vez, no he podido controlar eso..

Gracias de antemano

Preguntas similare

Leer las respuestas

#1 Ricardo M.
11/10/2006 - 14:49 | Informe spam
Buenos dias Alberto

Quisiera que se destruyera al cerrarlo y que se creara uno nuevo al ser
llamado nuevamentete agradezco a que te ofrescas a retocar el codigo.

Con lo que estuve tratando de contralar ese evento fue esto

private void menuItem2_Click(object sender, System.EventArgs e)
{
Cliente FrmCliente = new Cliente();
FrmCliente.MdiParent = this;
if (FrmCliente!=null)
{
MessageBox.Show("esta abierto");
FrmCliente.Show();
}
}

Gracias por ayudarme
Respuesta Responder a este mensaje
#2 Alberto Poblacion [MVP]
11/10/2006 - 16:53 | Informe spam
"Ricardo M." wrote in message
news:
Con lo que estuve tratando de contralar ese evento fue esto

private void menuItem2_Click(object sender, System.EventArgs e)
{
Cliente FrmCliente = new Cliente();
FrmCliente.MdiParent = this;
if (FrmCliente!=null)
{
MessageBox.Show("esta abierto");
FrmCliente.Show();
}
}




Bien, fíjate que el "if (FrmCliente!=null)" nunca se va a cumplir, porque
dos lineas más arriba has hecho un "new Cliente" y se lo has asignado al
FrmCliente, con lo que éste nunca tendrá un null.

Puedes crear una variable estática para controlar la apertura:

private static Cliente FrmCliente = null;

Y a continuación controlar el estado de la variable antes de
inicializarla. Si vale null, es la primera vez y hay que hacer un new e
inicializar la ventana. Si no vale null, quiere decir que ya se había
abierto antes. En ese caso, comprobamos si se le ha hecho el Dispose(), en
cuyo caso significa que la han cerrado (acuérdate de llamar al Dispose() en
el evento Closed), y entonces le ponemos un null para que se vuelva a crear
un poco más abajo:

private void menuItem2_Click(object sender, System.EventArgs e)
{
if (FrmCliente!=null)
{
if (FrmCliente.IsDisposed) FrmCliente=null;
}
if (FrmCliente==null)
{
FrmCliente = new Cliente();
FrmCliente.MdiParent = this;
}
}

No es la única forma de hacerlo, y lo he escrito de memoria sin probar si
funciona bien. Si te da algún problema lo del Dispose, puedes usar en lugar
del IsDisposed una variable estática booleana para controlar si ya has
abierto el formulario.
Respuesta Responder a este mensaje
#3 Ricardo M.
11/10/2006 - 17:14 | Informe spam
Gracias Alberto, funciona perfecto, ya estoy claro ahora que me explicaste
como funciona voy a buscarles otras maneras de hacerlo, pero lo que me diste
funciona perfecto, en verdad gracias por tu ayuda
Respuesta Responder a este mensaje
#4 Jose Luis Manners
12/10/2006 - 15:58 | Informe spam
Hola Ricardo,

Tal vez no te entendí bien, pero si lo que quieres es reusar y mostrar la
misma ventana previamente creada (o crear una nueva si todavía no existe),
te recomiendo darle una mirada al patrón Singleton:

http://www.elguille.info/colabora/p...iosMDI.htm

-
Coopera con el foro. Dinos si te sirvió la respuesta aquí planteada.
-

Saludos,

Jose Luis Manners
MCP, MCAD.NET
Microsoft MVP Visual C#
http://www.josemanners.com/
http://www.josemanners.com/mvp

"What we do for ourselves dies with us. What we do for others and the world
remains and is immortal."


"Ricardo M." <Ricardo wrote in message
news:
Saludos.
El problema es que tengo un MDI, cuando le hago llamado a un formulario
hijo
desde el menu, lo hace, pero el problema es cuando le hago llamado otra
vez
al mismo formulario desde el menu, vuelve a montar el mismo formulario y
quisiera que apareciera una sola vez, no he podido controlar eso..

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