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

标签 c# winforms checkbox event-handling

我有一个带有一些复选框的小窗体,CheckChanged 事件的每个复选框都有一个消息处理程序。由于一些复选框依赖于其他复选框,如果一个复选框的选中状态发生变化,它会更改任何相关复选框的选中状态。我发现这会导致在其他复选框上引发事件,但我的问题是每个事件都有一个函数调用,只有当事件来自用户实际单击复选框时才应调用该函数。我想知道如何判断(大概来自发送者或 EventArgs)CheckChanged 事件是否由鼠标点击引起。

悬崖:

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

最佳答案

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

我举了一个简单的例子:

   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");
        }

关于c# - 如何判断事件是否来自 C# 中的用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15549854/

相关文章:

c# - 在第一次调用完成事件句柄之前,如何防止任何按钮单击事件排队

c# - 在 WinForms 中,是否可以在 UI 中使用多个线程?

php - 基于复选框在 PHP 中是否被选中的变量增量

c# - 未设置 TransferEncodingChunked 时 HttpClient 抛出 OutOfMemory 异常

c# - 如何在大括号内不使用字符串连接的情况下使用字符串格式作为参数?

c# - 如何使用 C# 呈现 MathML

标题中带有 "Select All"复选框的 Android MultiSelectListPreference

ruby-on-rails - Ruby on Rails 表单 : how to create a CheckBox Table (or List)

c# - 为什么 AutoMapper 嵌套映射在没有内部类型的 CreateMap 的情况下工作

c# - 使用 LinqToSql、交易保存新的或更新?