Dar*_*enW 5 c# events winforms
在表单上,我有两个控件,A和B.每个控件在其值发生变化时发送一个事件.Form通过将B设置为某个值来处理A的ValueChanged事件,并通过设置A的值来设置B的ValueChanged.
我是否需要做一些特殊的事情以防止无限循环,其中用户更改A,发送一个导致B更新的ValueChanged事件,现在将其发送给ValueChanged事件,导致A更新...
我知道一些GUI工具包,比如Qt,在基础设施中内置了逻辑,以防止这样的循环.(请参阅Qt4上Blanchette&Summerfield书籍第1章中的"输入您的年龄"示例.)一些较旧的工具包需要程序员定义和管理标志以检测递归.对于WinForms,我还没有在任何地方阅读确定的声明.
举一个具体的例子,假设A和B是NumericUpDown控件,以华氏度和摄氏度显示温度.当用户更改一个时,另一个更新以显示另一个系统中的相应温度.
在实现自定义控件时,我设法防止此问题的方法是仅在值实际发生更改时才引发事件,如下所示。
public string Text
{
get { return _text; }
set
{
if (_text != value)
{
_text = value;
OnTextChanged();
}
}
}
Run Code Online (Sandbox Code Playgroud)
有人可能会说,在触发事件之前不检查该值是否确实不同是糟糕的代码。
我不记得曾经遇到过 Windows 窗体控件的这些问题,因此我一直使用的控件必须正确执行此检查。