我有一个带有一些复选框的小窗体,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/