我在 Windows 窗体上有 40 多个控件(文本框、单选按钮、复选框等)。每个控件都为事件处理程序(文本更改、检查更改等)注册。
我想防止这些事件在表单初始化期间触发。
在初始化之前取消订阅所有事件并在以后订阅是很费力的。
实现此目的的最佳方法是什么?
我通常愚蠢简单的解决方案是有一个由每个事件处理程序检查的 form 属性。
例如
private bool _inhibit = false;
private void Initialise()
{
_inhibit = true;
try
{
// initialise fields
}
finally
{
_inhibit = false;
}
}
Then just check the state of _inhibit in each handler.
不确定是否有一种不混乱的方法可以做到这一点。
虽然你提供的信息很少,但你当然可以使用:
Boolean Loading = false;
{
Loading = true;
LoadData();
// LoadData must set the fact it's finished...
}
然后在事件处理程序中:
if (Loading)
return;
您可以枚举所有控件,例如:
private void DisableAllHandlers()
{
foreach (var control in this.Controls)
{
// Use reflection
}
}
并使用文章如何从控件中删除所有事件处理程序中的源来禁用所选控件的处理程序。
在
窗体的构造函数中InitializeComponent
之后设置事件处理程序。喜欢:
form()
{
InitializeComponent();
// Set the event handlers to your controls like:
this.button1.Click += new System.EventHandler(this.button1_Click);
// Or
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
}