【问题标题】:Preventing a checkbox Checked event防止复选框选中事件
【发布时间】:2015-02-26 19:57:19
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# winforms checkbox


    【解决方案1】:

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

    【讨论】:

    • 工作得很好,谢谢!
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      加起来最多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;
         }
      }
      

      【讨论】:

        猜你喜欢
        • 2019-09-17
        • 1970-01-01
        • 1970-01-01
        • 2018-12-01
        • 2018-05-01
        • 2018-12-18
        • 1970-01-01
        • 2023-03-08
        • 1970-01-01
        相关资源
        最近更新 更多