Sis*_*hus 2 .net c# events winforms
这可能很难问,但我会尽我所能.在SO和其他地方制作事件的很多东西会引发变化,但我想要相反(至少我想我做了!).
我在窗体(numericUpDowns)上有几个控件.对于每个updown,我正在观察是否已经更改了值并且它将触发"ValueChanged"方法.
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
//do some complicated code ...
}
Run Code Online (Sandbox Code Playgroud)
这一切都适用于上下控件的更改导致重新计算fomr但是如果我想在方法中设置一些值并且不调用我的ValueChanged方法直到结束怎么办?
我几乎喜欢这样的东西
// start ignoring form events here
numericUpDown1.Value = 500;
numericUpDown2.Value = 50;
numericUpDown3.Value = 0;
// resume detecting form events here !
Run Code Online (Sandbox Code Playgroud)
有没有办法打开和关闭它?这是我应该担心的事情吗?
我有限的C#知识引导我达到这一点的最好的事情是创建一个名为" bIgnoreEvents" 的变量并在我的每个ValueChanged方法中使用它...
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
if (!bIgmoreEvents)
{
//do some complicated code ...
}
}
Run Code Online (Sandbox Code Playgroud)
这会跳过代码,但似乎很乱.有更简单的方法吗?
你也可以这样做:
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;
Run Code Online (Sandbox Code Playgroud)