2012-06-05 15 views
6

Mi aplicación es WinForms .NET 4 (C#) y uno de los formularios sigue cerrándose automáticamente después de presionar un botón.Extraño: formulario WinForms se cierra automáticamente después de presionar el botón

  • El formulario DOES tiene botones Aceptar y Cancelar predeterminados pero no se tocan.
  • Hay un evento ButtonTestConnection_Click que al hacer clic, hace su trabajo pero cierra el formulario de alguna manera.
  • Estoy usando el mouse para hacer clic en el botón, por lo que este NO es un caso de pulsaciones de teclas en cascada.
  • NO estoy configurando el DialogResult en esta función.

También traté de verificar la ausencia de esto. Cerrar/esto. Eliminar llamadas pero no encontrar ninguna.

Aquí está el código:

private void ButtonTestConnection_Click (object sender, System.EventArgs e) 
{ 
    this.Enabled = false; 
    this.Cursor = System.Windows.Forms.Cursors.WaitCursor; 

    this.ProgressBar.Minimum = 0; 
    this.ProgressBar.Maximum = 500; 
    this.ProgressBar.Value = 0; 

    this.ProgressBar.Visible = true; 
    this.ButtonTestConnection.Visible = false; 

    try 
    { 
     while (this.ProgressBar.Value < this.ProgressBar.Maximum) 
     { 
      // Some proxy code. 
      this.ProgressBar.Value++; 
     } 
    } 
    catch 
    { 
    } 

    this.ProgressBar.Visible = false; 
    this.ButtonTestConnection.Visible = true; 

    this.ProgressBar.Invalidate(); 
    System.Windows.Forms.Application.DoEvents(); 
    System.Threading.Thread.Sleep(10); 

    this.Cursor = System.Windows.Forms.Cursors.Default; 
    this.Enabled = true; 

    System.Windows.Forms.MessageBox.Show(result.ToString()); 
} 
+0

tengo la sensación de que puede tener algo que ver con el establecimiento en el botón para no habilitado que probablemente cambia el foco. No estoy seguro todavía. –

+1

Elimine todo del controlador de eventos y luego comience a agregar una línea a la vez para descubrir qué línea ocasiona el problema (optimice el uso de la búsqueda binaria) –

+1

Reemplace el método OnFormClosing del formulario. Establezca un punto de interrupción y mire la pila de llamadas cuando llegue. Publique en su pregunta si no puede encontrarle sentido. –

Respuesta

14

Comprobar si la propiedad DialogResult en el botón es igual a None.
De lo contrario, el formulario se cerrará cuando pulse ese botón y el formulario devolverá la configuración de la propiedad DialogResult del botón.

Por lo general, esto sucede mucho al copiar/pegar un botón de formulario existente, pero se olvide de quitar el botón pegado el establecimiento de DialogResult originales

+0

Para probar esto, separaría el botón del evento y haría clic en él. Apuesto a que sucederán los mismos resultados. –

+0

Gracias. Fue un problema de copiar y pegar después de todo. Nunca me di cuenta de DialogResult accesible a través del diseñador antes, ya que las personas generalmente lo configuran a través del código. –

+0

4 años después ... ¡gracias! – elmer007

Cuestiones relacionadas