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

标签 c# .net winforms events

这个要求可能很难,但我会尽力而为。 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/

相关文章:

c# - 如何从另一个 wpf 窗口更改 WPF 窗口标签文本

C# 如何从公共(public)构造函数调用私有(private)构造函数

c# - 异步 CTP 和超时

.net - 是否有适用于 Nexus 或 Artifactory 等 Java 工件存储库的 .NET 替代方案?你在哪里存储版本化的 DLL?

c# - 在 richtextbox 中查找所有换行符

c# - 将嵌套列表<X> 转换为嵌套列表<Y>

c# - WebClient 是否使用 KeepAlive?

c# EWS 2007 地址为空

c# - 如何设置文本框的高度?

c# - 将 datareader 值转换为可空变量