如何判断事件是否来自C#中的用户输入?

riq*_*ang 14 c# checkbox event-handling winforms

我有一个小表单,上面有一些复选框,并且每个复选框都有一个消息处理程序CheckChanged.由于某些复选框依赖于其他复选框,因此如果一个复选框的选中状态发生更改,则会更改任何相关复选框的选中状态.我发现这导致事件在其他复选框上引发,但我的问题是每个事件都有一个函数调用,只有当事件来自用户实际单击复选框时才应调用.我想知道如何判断事件是否是由鼠标点击引起的(可能是发件人或者发件人EventArgs)CheckChanged.

悬崖:

  • 多个复选框接收CheckChanged事件
  • 需要确定是否通过鼠标单击引发事件

Ale*_*lex 5

您可以使用标志来指示是否忽略事件.它可能比取消订阅事件处理程序更容易.它不是很复杂但它应该做的工作.

我把一个简单的例子放在一起:

   bool ignoreEvents = false;
        public Form1()
        {
            InitializeComponent();
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            ignoreEvents = true;
            checkBox2.Checked = checkBox1.Checked ;
            checkBox3.Checked = checkBox1.Checked;
            ignoreEvents = false;
        }

        private void checkBox2_CheckedChanged(object sender, EventArgs e)
        {
            if (ignoreEvents) return;
            MessageBox.Show("Changed in 2");
        }

        private void checkBox3_CheckedChanged(object sender, EventArgs e)
        {
            if (ignoreEvents) return;
            MessageBox.Show("Changed in 3");
        }
Run Code Online (Sandbox Code Playgroud)