阻止复选框选中事件

本文关键字:事件 复选框 | 更新日期: 2023-09-27 18:35:44

我有一个checkbox,我想问用户是否确定,否则我将取消操作。

我尝试了Click事件,但事实证明它仅在CheckedChanged事件之后被调用。

我认为我至少可以通过在CheckedChanged事件中询问用户来"丑陋"地做到这一点,但是如果他希望取消,我需要更改再次引发事件的Checked值。

我希望使用此解决方案避免的另一件事是,即使在用户回复之前,刻度线也出现在checkbox中。

我正在寻找在CheckedChanged之前发生的事件或防止CheckedChanged事件的方法。

阻止复选框选中事件

AutoCheck设置为 false . 并在 Click 事件中处理Checked状态。

查找示例代码。它只是删除附加到复选框的事件并将其添加回来

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
  if (checkBox1.Checked)
  {
    checkBox1.CheckedChanged -= checkBox1_CheckedChanged;
    checkBox1.Checked = false;
    checkBox1.CheckedChanged += checkBox1_CheckedChanged;
  }
}

起来就是Sievajet's答案。

AutoCheck 属性设置为 false,以防止在单击复选框时自动更新复选框的外观。

请参阅下面的AutoCheck官方文档

获取或设置一个值,该值指示是否 System.Windows.Forms.CheckBox.CheckedSystem.Windows.Forms.CheckBox.CheckState值和System.Windows.Forms.CheckBox'sSystem.Windows.Forms.CheckBox 点击。

尝试下面的 ClickEvent 处理程序

private void checkBox_Click(object sender, EventArgs e)
{
   if (checkBox.Checked == false)
   {
     DialogResult result = MessageBox.Show("Confirmation Message", "Confirm", 
                           MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
     if (result == DialogResult.OK)
     {
         checkBox.Checked = true;
     }
   }
   else
   {
     checkBox.Checked = false;
   }
}