El metodo propuesto funciona de maravilla mientras se instancie desde el formulario MDI, sin embargo, si es que intento usar dicho metodo desde otro formulario, igual abre pero genera duplicados:
1. Form "ArticulosLista" (abierto desde el MDI)
2. Form "ArticulosLista" (abierto desde otro formulario hijo)
Lo ideal es que solo abra un formulario, sin importar si la llamada se hizo en el mdi o en el hijo. ¿alguna idea?
Esta clase esta creada en un archivo externo Acciones.cs
Cita:
public class AbrirForm
{
Dictionary<string, Form> Ins = new Dictionary<string, Form>(); // Se Gurdan aqui los formularios que hayan sido abiertos para no volver a llamarlos. Trabaja con OpenForm
public void OpenForm(String NombreForm)
{
try
{
Form Frm;
if (!Ins.TryGetValue(NombreForm, out Frm) || Frm.IsDisposed)
{
Frm = (Form)Activator.CreateInstance(null, NombreForm).Unwrap();
Ins[NombreForm] = Frm;
}
Frm.MdiParent = Index.ActiveForm;
Frm.Activate();
Frm.WindowState = FormWindowState.Normal;
Frm.Show();
}
catch (Exception e)
{
throw e;
}
}
}
Aqui el formulario hijo desde el cual llamo a ese metodo. En el form MDI llamo de la misma manera al mismo Form "ArticulosLista".
Cita: // formulario hijo.cs
AbrirForm AbreF = new AbrirForm();
private void toolStripButton1_Click(object sender, EventArgs e)
{
AbreF.OpenForm("Presentacion.ArticulosLista");
}