【问题标题】:How to disable Events?如何禁用事件?
【发布时间】:2013-01-03 03:18:16
【问题描述】:

我创建btn1_MouseDown 事件。

  private void btn1_MouseDown(object sender, MouseEventArgs e)
    {
        btn1.BackgroundImage = Properties.Resources.click;
    }

我想在检查时禁用此 RadioButton 后面的 btn1_MouseDownt 事件。我的意思是说当Radiobutton 被选中时,这个btn1_MouseDown 事件不应该起作用。

 private void r1_CheckedChanged(object sender, EventArgs e)
    {

        如果(r1.Checked == true)
            时钟 = 5;

        radioButton2.Enabled = 假;
        radioButton3.Enabled = 假;
        radioButton4.Enabled = 假;
    }

这可能吗?

【问题讨论】:

  • 为什么要将布尔值与true 进行比较?
  • @lc 非常简单 - 检查是可为空的布尔值,因此您必须与 true 进行比较 :)
  • @AdamBilinski:这似乎是 WinForms,它不是可以为空的bool,而是普通的bool
  • @AdamBilinski 真的吗?最后我检查了RadioButton.CheckedSystem.Boolean
  • @lc 当然你是对的我在考虑 CheckBox :)

标签: c#


【解决方案1】:

r1_checkeChanged 内添加:

btn1.MouseDown -=btn1_MouseDown;

【讨论】:

  • 如果我想禁用 20 个按钮的事件,它不会进入复杂代码?
【解决方案2】:

您可以删除该事件:

btn1.MouseDown -= btn1_MouseDown

当然别忘了在需要的时候再添加回来。


但是,我不会这样做,而是更改您的事件处理程序的代码来检查单选按钮的状态:

private void btn1_MouseDown(object sender, MouseEventArgs e)
{
    if (!r1.Checked)
        btn1.BackgroundImage = Properties.Resources.click;
}

【讨论】:

    【解决方案3】:

    1st option 可以像这样删除单选按钮 check_change 事件中的事件:

    btn1.MouseDown -=btn1_MouseDow;

    但我不喜欢这种方式。
    Second是在这个事件开始的时候加一个标志,检查是否执行这个事件 像这样:

    bool flag;
    
    private void btn1_MouseDown(object sender, MouseEventArgs e)
    {
        if (flag) return;
        btn1.BackgroundImage = Properties.Resources.click;
    }
    

    【讨论】:

    • 我使用了多个单选按钮,我只想为 RadioButton1 而不是其他按钮这样做,那么flag 将满足我的要求吗?
    • 是的,您只能在 radiobutton1_checkchanged 上执行 flag=true;。它会工作
    猜你喜欢
    • 2011-06-11
    • 1970-01-01
    • 2015-02-24
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    相关资源
    最近更新 更多