2013-07-01 16 views
5

Mój problem polega na tym, że sprawdzam poprawność TextBox w zdarzeniu Leave i sprawdzam, czy to ma coś z tego TextBox. Jeśli tekst w tym TextBox jest taki sam jak zero, pojawia się MessageBox, ale jeśli formularz zamyka się, a fokus jest w tym TextBox, pojawia się MessageBox, ponieważ TextBox nic nie ma.Jak zapobiec zdarzeniu w wyzwalaczu sterowania po zamknięciu formularza?

W jaki sposób można uniknąć sprawdzania poprawności w zdarzeniu Leave podczas zamykania formularza?

Odpowiedz

6

Konieczne będzie przesłonięcie metody OnFormClosing w formularzu i ustawienie flagi informującej, że formularz jest zamykany. Następnie, podczas sprawdzania poprawności, sprawdź najpierw tę flagę.

Pamiętaj, aby ustawić flagę przed nazywając base.

+0

Chcę tego spróbować, ale w jaki sposób przypisać to zdarzenie, które zastępuje, _isClosing to mieszkanie, które muszę zweryfikować? –

+0

@ JoséGordilloLópez, zobacz moją aktualizację (zmieniłem 'virtual' na' override'). Ponadto "_isClosing" jest zmienną klasy 'private bool _isClosing;', którą ustawisz tak, aby formularz wiedział, że się zamyka. Następnie w zdarzeniu 'Leave' zrobisz to,' if (_isClosing) {return; } ', aby anulować sprawdzanie poprawności. –

+0

dziękuję, to działa bardzo dobrze, a dla reszty użytkownika, dzięki –

4

Jednym ze sposobów jest usunięcie zdarzeń, które podnosi pole tekstowe. Nie wiem, jak sprawdzasz poprawność, ale możesz spróbować ustawić wartość właściwości Enabled na wartość false w zdarzeniu FormClosing.

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{   
    myTextBox.Enabled = false; 
} 

lub usunąć obsługi Leave zdarzeń

private void Form1_FormClosing(Object sender, FormClosingEventArgs e) 
{  
    myTextBox.Leave -= myTextBox_Leave; 
} 
1

Użyj „zatwierdzone” zdarzenie polu tekstowym, aby osiągnąć ten cel, zamiast zdarzenia „Leave”.

Zapewni to, że Twój kod zostanie wykonany przed zamknięciem formularza i powinien osiągnąć dokładnie to, czego potrzebujesz.

Powiązane problemy