C # Convalida prima di lasciare evento accept_button
-
16-09-2019 - |
Domanda
Scusate se questa è una domanda stupida, ma io sono un beginer qui.
Ho un semplice personalizzato finestra di dialogo con due pulsanti: Accetta e Annulla. Il pulsante Accept è l'AcceptButton della forma.
voglio fare alcune convalide sull'evento Accept_Click e decidere se posso chiudere la finestra o no, ma ogni volta che lascia questo metodo, la finestra si chiude e restituisce Ok automaticamente.
Che cosa posso fare per fermare la finestra di dialogo si chiuda in sé? o devo fare le cose in un altro modo?
grazie
Soluzione
Vorrei avere una variabile livello di modulo (chiamarlo _vetoClosing
) In Click del pulsante di accettare, vorrei correre convalida e impostare la variabile in base a quanto segue:
private void acceptButton_Click(object sender, EventArgs e)
{
// Am I valid
_vetoClosing = !isValid();
}
Poi, nel caso FormClosing, vorrei cancellare vicino se _vetoClosing è vero
private void Form_FormClosing(object sender, FormClosingEventArgs e)
{
// Am I allowed to close
if (_vetoClosing)
{
_vetoClosing = false;
e.Cancel = true;
}
}
Attivazione pulsante Accetta off è ottimale perché si perde la Enter per premere funzionalità.
Altri suggerimenti
Vorrei convalida come i comandi cambiano, e solo attivare il pulsante Accept se l'intero modulo è valido.
Ciò consentirebbe di mantenere il pulsante come pulsante predefinito (AcceptButton), ma evitare che ciò accada.
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;
}
}
E 'l'AcceptButton o CancelButton sul modulo impostato su quel pulsante? In tal caso, provare a disinserimento e manualmente l'impostazione DialogResult nel gestore quando si desidera chiudere la finestra di dialogo.