Buscar

martes, 21 de abril de 2009

Crear una sola instancia de un formulario en c#

Crear una sola instancia de un formulario en c#

Este código me lo encontré en una página, no me acuerdo cual, y me ha sido muy útil, su función es permitir solo una instancia del formulario abierta. Entonces si ya tenemos abierto un formulario, y lo volvemos a tratar de abrir, el mostrara el primer formulario abierto, en ves de crear una nueva instancia.

Uso:
Este código se debe copiar en cada formulario, que se desee dotar de esta funcionalidad
Y se reemplaza
Formulario
por el nombre de la clase del formulario.
private static Formulario m_FormDefInstance;
/// 
/// Crea una instancia unica del Formulario
/// 
/// Instancia por defecto
public static Formulario DefInstance
{
get
{
if (m_FormDefInstance == null  || m_FormDefInstance.IsDisposed)
m_FormDefInstance = new Formulario ();
return m_FormDefInstance;
}
set
{
m_FormDefInstance = value;
}
}

Para abrir el formulario se utiliza:

Formulario.DefInstance.Show();

9 comentarios:

  1. Un comentario: hay un error en donde dice

    if (m_FormDefInstance == null m_FormDefInstance.IsDisposed)

    debe decir:

    if (m_FormDefInstance == null || m_FormDefInstance.IsDisposed)

    Eso nada más, gracias por la solución.

    ResponderEliminar
  2. Muchas gracias, ya esta corregido

    ResponderEliminar
  3. A partir de este código hice mi propia rutina para tener sólo una instancia de una ventana :D

    ResponderEliminar
  4. excelente post muchas gracias, me fue muy útil, de esas cosas pequeñitas pero inteligentes.

    ResponderEliminar
  5. Gracias por el aporte solo un comentario si la ventana es hija hay que agregar lo siguiente para abrir el formulario
    frm_libros.DefInstance.MdiParent = this;
    frm_libros.DefInstance.Show();

    ResponderEliminar
  6. Gracias por el aporte solo un comentario si la ventana es hija hay que agregar lo siguiente para abrir el formulario
    Formulario.DefInstance.MdiParent = this;
    Formulario.DefInstance.Show();

    ResponderEliminar
  7. que gran solucion gracias me sirvio de mucho!!!!

    ResponderEliminar
  8. yo añadi esta linea para que me devuelva el formulario adelante de todos


    frmConsulta.DefInstance.TopMost = true;

    ResponderEliminar
  9. Brutal! Me sirvió, gracias crack!

    ResponderEliminar