我可以更改表单控件值但不能触发事件吗?

时间:2012-07-23 10:43:48

标签: c# .net winforms events

这个可能很难问,但我会尽我所能。在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 ...
    }
}

这会跳过代码,但看起来很乱。有更简单的方法吗?

1 个答案:

答案 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;