2010-10-12 5 views
5

Ho un pulsante btnOK nel mio modulo, con una proprietà di OK. La proprietà AcceptButton del modulo è impostata su btnOK. Quindi, se clicco sul pulsante, il modulo si chiude automaticamente.C#: come annullare l'azione di chiusura per un pulsante impostato come pulsante Accetta o Annulla su un modulo?

Ora, all'interno del metodo btnOK_Click(), voglio poter annullare l'azione chiusa, ad es. se c'è stato un errore voglio mostrare una finestra di messaggio e non chiudere il modulo.

Come faccio?

risposta

6

IMO proprio non c'è bisogno di impostare DialogResult proprietà sul pulsante, ma imposta direttamente sul modulo in btnOK_Click evento:

private void btnOK_Click(object sender, EventArgs e) 
{ 
    if (yeahLetsClose) 
     this.DialogResult = DialogResult.OK; // form will close with OK result 
    // else --> form won't close... 
} 

BTW, AcceptButton proprietà è legata al tasto ENTER (quando si premere sul modulo, verrà premuto AcceptButton)

1

Aggiungere un gestore di eventi per l'evento di chiusura del modulo. Il parametro EventArgs dovrebbe avere una proprietà Cancel.

+0

Funzionerà, ma è kludgy - richiede l'impostazione di un flag nell'evento click, che si invita a leggere in caso di chiusura. Se questo è l'unico modo, bene - ma stavo cercando qualcosa un po 'meno approssimativo ... –

+0

È questo o cambia il modo in cui i pulsanti funzionano in modo che l'elaborazione si chiuda o non chiude il modulo manualmente e non si basa su la roba automatica AcceptButton. – asawyer

8

In caso di errore aggiuntivo:

this.DialogResult = DialogResult.None 
Problemi correlati