3

这可能很难问,但我会尽力而为。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 ...
    }
}

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

4

1 回答 1

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;
于 2012-07-23T11:32:59.190 回答