Primera parte que funciona:
1.En el formulario de "existencias" tengo.
Código:
2.La llamada desde el formulario MDI:private static existencias aForm = null; public static existencias Instance() { if (aForm == null) { aForm = new existencias (); } return aForm; } public existencias() { InitializeComponent(); } protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); aForm = null; }
Código:
Hasta aquí todo correcto, por muchas veces que le de al menú sólo habrá una instancia del formulario existencias.public void menuItem6_Click(object sender, EventArgs e) { Form f = existencias.Instance(); f.MdiParent = this; f.Show(); f.Activate(); }
El problema es que debido a diversas situaciones las existencias varían, en ese formulario tengo dos datagrid uno vinculado a un dataset y otro que toma datos del primer datagrid y de otros lugares.... por lo que decidí que la mejor forma de presentar los datos era cerrar el formulario y volverlo a abrir....
Código:
además de esto he tenido que hacer unas modificaciones en los códigos del principio como la llamada dentro del MDI realizarla dentro de un try catch, y en el formulario de existencias dejar algo como lo siguiente para que desde el menú no vuelva a salir otra instancia.try { foreach (Form form in Application.OpenForms) { if (form.Text.ToString().Equals("existencias")) { existencias f = new existencias(); existencias.Instance().Close(); ControlForm.titulo = "algo"; f.MdiParent = MDI.ActiveForm; f.Show(); f.Activate(); } } } catch (Exception ex) { }
Código:
Pero esto sólo funciona una vez. Es decir si tengo el formulario de existencias abierto... y hago la "actualización" todo va bien y tengo una única instancia y no puedo abrir otra desde el menú.private static existencias aForm = null; public static existencias Instance() { if (aForm == null & ControlForm .titulo.Equals ("") ) { aForm = new existencias (); } return aForm; } public existencias() { InitializeComponent(); } protected override void Dispose(bool disposing) { if (disposing) { if (components != null) { components.Dispose(); } } base.Dispose(disposing); aForm = null; ControlForm.titulo = ""; }
Pero al realizarlo una segunda vez, el formulario de existencias no se actualiza al igual que una tercera... y a la cuarta por cada intento de actualización comienza a abrir nuevas instancias del formulario de existencias.