这个可能很难问,但我会尽我所能。在SO和其他地方制作事件的很多东西会引发变化,但我想要相反(至少我认为我做了!)。
我在表单上有几个控件(numericUpDowns
)。对于每个updown,我正在观察是否已经更改了值并且它将触发“ValueChanged”方法。
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
//do some complicated code ...
}
这一切都适用于上下控件的更改导致重新计算fomr但是如果我想在方法中设置一些值并且不调用我的ValueChanged
方法直到结束?< / p>
我几乎喜欢这样的东西
// 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 ...
}
}
这会跳过代码,但看起来很乱。有更简单的方法吗?
答案 0 :(得分:6)
你也可以这样做:
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;