【发布时间】:2012-07-23 10:43:48
【问题描述】:
这个问题可能很难问,但我会尽力而为。 SO 和其他地方有很多关于在更改时触发事件的内容,但我想要相反的内容(至少我认为我这样做!)。
我在表单上有多个控件 (numericUpDowns)。对于每个 updown,我都在观察一个值是否已更改,它将触发一个“ValueChanged”方法。
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
//do some complicated code ...
}
这一切都很好地与上下控件的更改导致重新计算 fomr 但是如果我想在一个方法中设置一些值并且直到最后才调用我的ValueChangedmelthods 怎么办?
我几乎想要这样的东西
// 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 ...
}
}
这会跳过代码,但看起来很乱。有没有更简单的方法?
【问题讨论】:
-
你为什么觉得它很乱?假设您的意思是
if (!bIgnoreEvents),它将以一种直接、可理解和可维护的方式很好地完成工作。 -
谢谢,现在神奇地修复了。)好吧,也许不是“凌乱”,也许只是不优雅......因为我对此很陌生,我经常担心养成坏习惯...... .
-
好吧,优雅和不那么易读的聪明之间有一条很好的界限,既然你是新手,我建议不要那样做(至少一开始不是)。相反,专注于获得可行的东西,同时尽可能简单易懂。关注KISS principle。
-
谢谢!现在,我在 S.O. 做什么?带着这个问题?删除它?没有真正的“不需要回答”按钮......
-
您可以编写自己的答案并将其保存以供后代使用。