2009-04-24 9 views
6

Przepraszam, jeśli to głupie pytanie, ale jestem początkującym tutaj.C# Zatwierdź przed opuszczeniem zdarzenia accept_button

Mam proste niestandardowe okno dialogowe z dwoma przyciskami: Zaakceptuj i anuluj. Przycisk Accept to AcceptButton formularza.

Chcę dokonać pewnych sprawdzeń w zdarzeniu Accept_Click i zdecydować, czy mogę zamknąć okno dialogowe, czy też nie, ale za każdym razem, gdy zostawia tę metodę, okno dialogowe automatycznie się zamyka i zwraca Ok.

Co mogę zrobić, aby zatrzymać zamknięcie okna dialogowego? czy muszę zrobić coś w inny sposób?

dziękuję

+0

http://stackoverflow.com/questions/4590903/exit-sub-on-dialogresult-ok-button/4591022#4591022 – captonssj

Odpowiedz

10

musiałbym zmienną poziomu postaci (nazywają to _ vetoClosing) W zdarzenia Click przycisku akceptacji jest, chciałbym uruchomić sprawdzanie poprawności i ustawić zmienną w oparciu o które:

private void acceptButton_Click(object sender, EventArgs e) 
    { 
     // Am I valid 
     _vetoClosing = !isValid(); 
    } 

Następnie w przypadku FormClosing, ja by anulować blisko jeśli _vetoClosing prawda

private void Form_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     // Am I allowed to close 
     if (_vetoClosing) 
     { 
      _vetoClosing = false; 
      e.Cancel = true; 
     } 
    } 

Włączanie przycisk Akceptuj off nie jest optymalne, ponieważ tracisz Enter, aby nacisnąć funkcjonalności.

+0

Zgadzam się ... zamknięcie zdarzenia jest sposobem na obsłużenie tego. –

0

Czy przycisk AcceptButton lub CancelButton w formularzu jest ustawiony na ten przycisk? Jeśli tak, spróbuj wyzerować i ręcznie ustawić DialogResult w programie obsługi, gdy chcesz zamknąć okno dialogowe.

+1

I nie chcę tego robić, ponieważ chcesz, aby był to domyślny przycisk po naciśnięciu klawisza Enter. – DkAngelito

2

Chciałbym sprawdzić poprawność sterowania i włączyć przycisk Akceptuj, jeśli cały formularz jest prawidłowy.

To pozwoli ci zachować twój przycisk jako przycisk domyślny (AcceptButton), ale zapobiegniesz temu.

1

Czystsze rozwiązaniem byłoby ustawienie DialogResult do None:

private void acceptButton_Click(object sender, EventArgs e) 
{ 
    if (!isValid()) { 
     this.DialogResult = System.Windows.Forms.DialogResult.None; 
    } 
} 
Powiązane problemy