2012-06-05 19 views
6

Moja aplikacja to WinForms .NET 4 (C#) i jedna z formularzy zamyka się automatycznie po naciśnięciu przycisku.Dziwne: Formularz WinForm jest zamykany automatycznie po naciśnięciu przycisku

  • Formularz ma domyślne przyciski Akceptuj i Anuluj, ale nie są one dotykane.
  • Istnieje zdarzenie ButtonTestConnection_Click, które po kliknięciu wykonuje swoje zadanie, ale jakoś zamyka formularz.
  • Używam myszy, aby kliknąć przycisk, więc nie jest to przypadek kaskadowania naciśnięć klawiszy.
  • Nie ustawiam DialogResult w tej funkcji.

Próbowałem również sprawdzić, czy nie zabłąkane.Close/this.Dotose połączeń, ale nie znaleziono.

Oto kod:

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

mam wrażenie, może to mieć coś wspólnego z ustawieniem przycisku, aby nie włączone, co prawdopodobnie przesuwa ostrość. Nie wiem jeszcze. –

+1

Usuń wszystko z obsługi zdarzenia, a następnie zacznij dodawać po jednej linii naraz, aby dowiedzieć się, która linia powoduje problem (zoptymalizuj za pomocą wyszukiwania binarnego). –

+1

Zastępuje metodę OnFormClosing formularza. Ustaw punkt przerwania i spójrz na stos wywołań po trafieniu. Opublikuj go w swoim pytaniu, jeśli nie możesz tego zrozumieć. –

Odpowiedz

14

Sprawdź, czy nieruchomość DialogResult przycisk równa None.
Jeśli nie, to formularz zostanie zamknięty po naciśnięciu tego przycisku, a formularz zwróci ustawienie właściwości DialogResult przycisku.

Zazwyczaj dzieje się tak dużo podczas kopiowania/wklejania istniejący przycisk forma, ale zapomnij usunąć przycisk wklejony oryginalny DialogResult ustawienia

+0

Aby to udowodnić, odłączyłem przycisk od zdarzenia i kliknąłem. Założę się, że takie same wyniki się wydarzą. –

+0

Dziękuję. W końcu był to problem z kopią i wklejaniem. Nigdy nie zauważyłem DialogResult dostępnego za pośrednictwem projektanta, ponieważ ludzie zazwyczaj ustawiają go za pomocą kodu. –

+0

4 lata później ... dziękuję! – elmer007

Powiązane problemy