2009-09-03 29 views
23

¿Hay alguna forma de cancelar un cambio de estado de RadioButton o CheckBox antes de que cambie?Cómo cancelar RadioButton o CheckBox marcada cambiar

Esperaba un evento simple como CheckedChanging o BeforeCheckedChange.

Realmente quiero evitar escuchar los clics del mouse y las teclas presionadas. Pero si conoce una forma confiable comprobada de usar clics del mouse y presionar teclas, explíquelo.

Estoy usando .NET 2.0 con controles de Winforms estándar.

Respuesta

35

Establezca AutoCheck en false.

Anulación OnClick de comprobación manual de la casilla de verificación AutoCheck

+1

yo ni siquiera sabía que existían AutoCheck. Esto es exactamente lo que quiero, gracias. –

+0

Me pregunto por qué esto es diferente a algunos otros controles donde tendría algo así como un evento 'CheckedChanging' con un argumento de evento donde podría establecer' e.Cancel = true; 'si desea cancelar el cambio de' Checked' propiedad. – roncli

+2

en caso de radiobutton hay una nota importante de doc: 'Si la propiedad AutoCheck se establece en falso, un grupo de controles RadioButton no actuará como un grupo mutuamente exclusivo y la propiedad Comprobada debe actualizarse en el código' – oleksa

17

Código de demostración, agrega un mensaje de confirmación al 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

¿Funciona esto si se presiona la barra espaciadora cuando el control tiene foco? – cjbarth

+0

Si yo soy el que hace esta pregunta, definitivamente aceptaré esto como la respuesta – swdev

1

He utilizado este para cancelar un cheque botón de radio.

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

El único problema que tuve con este enfoque es que el botón de radio anterior ya se ha desmarcado, por lo que esto no deshace completamente el clic. Para eso tuve que agregar un controlador de eventos para el evento CheckedChanged para cada botón de radio, y cuando un botón de opción no está seleccionado, guarde el botón que estaba desactivado en caso de que necesite volver a revisarlo para deshacer completamente el clic. –

Cuestiones relacionadas