2009-04-24 18 views
6

Scusami se questa è una domanda sciocca, ma io sono un principiante qui.C# Convalida prima di uscire dall'evento accept_button

Ho una finestra di dialogo personalizzata con due pulsanti: Accetta e Annulla. Il pulsante Accetta è l'acceptButton del modulo.

Voglio fare alcune convalide sull'evento Accept_Click e decidere se posso chiudere la finestra di dialogo o meno, ma ogni volta che lascia questo metodo, la finestra di dialogo si chiude automaticamente e restituisce Ok.

Cosa posso fare per interrompere la chiusura della finestra di dialogo? o devo fare le cose in qualche altro modo?

grazie

+0

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

risposta

10

avrei una variabile livello di modulo (lo chiamano _ vetoClosing) In Click del pulsante di accettare, vorrei correre convalida e impostare la variabile sulla base di tale:

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

Poi, nel caso FormClosing, ho annullerebbe vicino se è vero _vetoClosing

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

Accensione pulsante Accetta off è ottimale perché si perde la Enter per premere la funzionalità.

+0

Accetto ... l'evento di chiusura è il modo di gestirlo. –

0

E 'l'AcceptButton o CancelButton sul modulo impostato su quel pulsante? In tal caso, provare a disattivarlo e impostare manualmente DialogResult nel gestore quando si desidera chiudere la finestra di dialogo.

+1

I non voglio farlo perché vuoi che sia il pulsante predefinito quando preme Invio – DkAngelito

2

Vorrei convalidare mentre i controlli cambiano e abilitare il pulsante Accetta solo se l'intero modulo è valido.

Ciò consentirebbe di mantenere il pulsante come pulsante predefinito (AcceptButton), ma impedire che ciò si verifichi.

1

una soluzione più pulita sarebbe quella di impostare DialogResult su Nessuno:

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