2009-09-03 7 views
23

C'è un modo per cancellare un cambiamento di stato di RadioButton o CheckBox prima che cambi?Come annullare la modifica di RadioButton o CheckBox

Speravo in un evento semplice come CheckedChanging o BeforeCheckedChange.

Desidero davvero evitare l'ascolto dei clic del mouse e dei tasti premuti. Ma se sei a conoscenza di un modo affidabile e provato di usare i clic del mouse e le pressioni dei tasti, ti preghiamo di spiegarlo.

Utilizzo .NET 2.0 con controlli Winform standard.

risposta

35

Impostare AutoCheck su falso.

Override Su clic al controllo manuale la casella di controllo AutoCheck

+1

Non ho mai nemmeno saputo che AutoCheck esistesse. Questo è esattamente quello che voglio, grazie. –

+0

Mi chiedo perché questo è diverso da altri controlli in cui si avrebbe qualcosa di simile a un evento 'CheckedChanging' con un argomento evento in cui è possibile impostare' e.Cancel = true; 'se si desidera annullare la modifica di' Controllato' proprietà. – roncli

+2

in caso di radiobutton c'è una nota importante da doc: 'Se la proprietà AutoCheck è impostata su false, un gruppo di controlli RadioButton non agirà come un gruppo mutuamente esclusivo e la proprietà Checked deve essere aggiornata nel codice' – oleksa

17

Codice di demo, aggiunge una richiesta di conferma di evento Click.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
     this.checkBox1.AutoCheck = false; 
     this.checkBox1.Click += new System.EventHandler(this.checkBox1_Click); 
    } 

    private void checkBox1_Click(object sender, EventArgs e) 
    { 
     CheckBox checkBox = (CheckBox)sender; 
     if (!checkBox.Checked) 
     { 
      DialogResult dialogResult = MessageBox.Show(
       "Are you sure?", "my caption", 
       MessageBoxButtons.YesNo); 

      if (dialogResult == DialogResult.Yes) 
      { 
       checkBox.Checked = true; 
      } 
     } 
     else 
     { 
      checkBox.Checked = false; 
     } 
    } 
} 
+1

Funziona se la barra spaziatrice viene premuta quando il controllo è attivo? – cjbarth

+0

Se io sono quello che fa questa domanda, lo accetterò sicuramente come risposta – swdev

1

Ho usato questo per annullare un controllo pulsante di opzione.

private void radioButton1_MouseClick(object sender, MouseEventArgs e) 
    { 
     RadioButton r = (RadioButton)sender; 
     r.Checked = !(r.Checked); 
    } 
+1

L'unico problema che ho avuto con questo approccio è che il pulsante radio precedente è già stato deselezionato, quindi questo non annulla completamente il clic. Per questo ho dovuto aggiungere un gestore di eventi per l'evento CheckedChanged per ciascun pulsante di opzione, e quando un pulsante di opzione è deselezionato, salva il pulsante deselezionato nel caso in cui sia necessario ricontrollarlo per annullare completamente il clic. –

Problemi correlati