这个要求可能很难,但我会尽力而为。 SO 和其他地方有很多关于在变化时触发事件的内容,但我想要相反的东西(至少我认为我这样做!)。
我的表单上有多个控件 (numericUpDowns
)。对于每个 updown,我都会观察值是否已更改,并且它将触发“ValueChanged”方法。
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
//do some complicated code ...
}
对于上下控件的更改会导致重新计算 fomr,这一切都运行良好,但是如果我想在方法中设置一些值并且不调用我的 ValueChanged
方法,直到结束?
我几乎想要这样的东西
// start ignoring form events here
numericUpDown1.Value = 500;
numericUpDown2.Value = 50;
numericUpDown3.Value = 0;
// resume detecting form events here !
有办法打开和关闭它吗?这是我应该担心的事情吗?
我有限的 C# 知识让我达到这一点的最好方法是创建一个名为“bIgnoreEvents”的变量,并在我的每个 ValueChanged
方法中使用它。 .
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
if (!bIgmoreEvents)
{
//do some complicated code ...
}
}
这会跳过代码,但看起来很困惑。有没有更简单的方法?
最佳答案
您也可以这样做:
var eventHandler = new EventHandler((o, a) =>
{
//do stuff
});
numericUpDown1.ValueChanged += eventHandler;
//normal behaviour
//remove eventHandler
numericUpDown1.ValueChanged -= eventHandler;
numericUpDown1.Value = 500;
numericUpDown2.Value = 50;
numericUpDown3.Value = 0;
//add eventHandler
numericUpDown1.ValueChanged += eventHandler;
关于c# - 我可以更改表单控件值但不触发事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11610969/