2010-02-01 27 views
6

¿Cómo evito que se abran formularios múltiples?Impedir instancias de formularios múltiples

Sí. Visualizo en el formulario pero el usuario puede volver a hacer clic en el formulario principal y en el botón y se abre otra instancia del formulario.

Respuesta

2

dos opciones, dependiendo de lo que necesita:

  1. Uso ShowDialog en lugar de Show, que se abrirá una ventana modal. Esta es la solución obvia si no necesita que su formulario principal esté activo mientras el formulario secundario está abierto.

  2. O haga un seguimiento de la ventana que ya abrió en el formulario principal y no haga nada si ya está abierta. Esto será necesario si desea que el usuario pueda usar el formulario principal mientras el formulario hijo ya está abierto, tal vez para abrir otros formularios.

0

Desactive la forma principal hasta que desaparezca el formulario secundario o desactive el botón.

button_onClick(object Sender, EventArgs e) 
{ 
    Button btn = sender as Button; 
    btn.Enabled = false; 
    Form myform = new MyForm(); 
    myform.Show(); 
} 

Por supuesto, que realmente debería estar usando form.ShowDialog() en lugar de form.Show() si quieres comportamiento modal.

2

hacer algo como:

SingleForm myform = null; 

void ShowMyForm_Click(object sender, EventArgs e) 
{  if (myform == null) 
     { 
      myform = new SingleForm(); 
     } 
     myform.Show(); 
     myform.BringToFront(); 
} 
+0

esto es mejor, pero no evita que el usuario accidental o deliberadamente vuelva a llevar la forma principal al frente. –

+0

no dijo que el formulario principal tenía que permanecer en segundo plano ... simplemente no quería que el usuario pudiera abrir otro formulario cuando se hizo clic en el botón ...;) Pero gracias por las ediciones. .. oh ... Estaba malinterpretando, supongo. Estaba pensando que había una segunda forma que se abrió cuando se hizo clic en un botón ... idk – IAbstract

+0

Iba a agregar el .ShowDialog() como otra opción, pero John K. y Johannes me ganaron. – IAbstract

1

Fuerza su forma de objeto a que se adhieran al patrón Singleton

0

Yo prefiero usar los genéricos y la carga diferida para manejar mis formas. Como todos mis formularios heredan de una clase base, puedo usar el mismo método para llevar los formularios al frente, enviarlos a la parte posterior, destruirlos, iniciarlos, etc.

Si conservas una clase de administrador de formularios que es responsable de administrar los formularios cargados, puede traer cualquier formulario al frente que desee, o evitar que los formularios específicos puedan regresar a menos que se cumplan ciertos criterios.

public void LoadForm<T>() where T : MyNameSpace.MyBaseForm 
{ 
    // Load all your code in this joint and just call it when you 
    // need a form. In here, you can determine if a copy of the form 
    // already exists and then bring it forward or not 
} 
Cuestiones relacionadas