在窗体上,我有两个控件,即A和B。每个控件在其值更改时都发送一个事件。窗体通过将B设置为某个值来处理A的ValueChanged事件,并通过设置A的值来处理B的ValueChanged事件。
我是否需要做一些特殊的事情来防止无限循环,即用户更改了A,发送了一个ValueChanged事件,导致B更新,现在又发送了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();
}
}
}
有人可能会争辩说,在触发事件之前不检查该值是否实际上是不同的是错误的代码。
我不记得Windows窗体控件曾遇到过这些问题,因此我一直在使用的控件必须正确执行此检查。
关于c# - 是什么防止互连的Winforms控件之间出现无限循环?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29307297/