Código repetido

15/07/2007 - 19:35 por Norberto Kelijman | Informe spam
Estimados:

Tengo una aplicación MDI. En el formulario principal hay un menú desde el
que se abren todas las demás ventanas. El evento click del menú tiene la
forma:

private void tiposDeCobranzaToolStripMenuItem_Click(object sender, EventArgs
e)
{
...
Form_ABC_TiposDeCobranza formulario = new Form_ABC_TiposDeCobranza();
...
}

El evento es bastante más largo porque previene que el mismo formulario se
abra más de una vez, pero dejé sólo lo que importa para la consulta. Ahora
que hay muchos formularios hijos (y va a haber muchos más) el código de la
ventana principal me quedó tremendamente largo, cuando casi todo es
repetido. Mi problema es que para instanciar el nuevo formulario tengo que
nombrar la clase. ¿Cómo haría un método que cree los formularios hijos,
dándole como parámetro el nombre de la clase del formulario?

Para el caso del ejemplo, quisiera escribir en el evento click del menú algo
así como CrearFormularioHijo("Form_ABC_TiposDeCobranza"). ¿Cómo sería el
método CrearFormularioHijo()?

Gracias.
Norberto

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
15/07/2007 - 19:53 | Informe spam
"Norberto Kelijman" wrote in message
news:
Para el caso del ejemplo, quisiera escribir en el evento click del menú
algo así como CrearFormularioHijo("Form_ABC_TiposDeCobranza"). ¿Cómo sería
el método CrearFormularioHijo()?



Lo podrías hacer por Reflexión, pero no merece la pena: puedes llamarlo
así:

CrearFormularioHijo(new Form_ABC_TiposDeCobranza());

y el "CrearFormularioHijo" sería parecido a esto:

private void CrearFormularioHijo(Form f)
{
//...Comprobaciones para que no se abra dos veces...
f.MdiParent = this;
f.Show();
}
Respuesta Responder a este mensaje
#2 Norberto Kelijman
15/07/2007 - 22:52 | Informe spam
¡Muchísimas Gracias!
En mi código el formulario sólo se creaba si no existía previamente, en el
tuyo se crea siempre, pero lo solucioné agregando f.close() para el caso de
que exista previamente, cosa que se destruya.

Para que sea de más utilidad para otros foreros, he aquí el código completo:

private void CrearFormularioHijo(Form f)
{
// a flag to store if the child form is opened or not
bool found = false;
// get all of the MDI children in an array
Form[] charr = this.MdiChildren;
if (charr.Length == 0) // no child form is opened
{
f.MdiParent = this;
f.StartPosition = FormStartPosition.Manual;
f.Location = new Point(0, 0);
f.Show();
}
else // child forms are opened
{
foreach (Form chform in charr)
{
if (chform.Name == f.Name)
// one instance of the form is already opened
{
chform.Activate();
found = true;
break; // exit loop
}
else
found = false; // make sure flag is set to
// false if the form is not found
}
if (found == false)
{
f.MdiParent = this;
f.StartPosition = FormStartPosition.Manual;
f.Location = new Point(0, 0);
f.Show();
}
else f.Close();
}
}
private void tiposDeCobranzaToolStripMenuItem_Click(object sender, EventArgs
e)
{
CrearFormularioHijo(new Form_ABC_TiposDeCobranza());
}
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida