目前在我的程序中有大约10个控件事件处理程序,我有这个代码:
if (!mapLoaded)
return;
Run Code Online (Sandbox Code Playgroud)
当我通过打开文件对话框加载地图时,我将mapLoaded设置为true.另一种方法是禁用启动时的所有控件,并在加载地图后启用所有控件.不幸的是,有30多个控件,这只是30行...
a.Enabled = true;
b.Enabled = true;
c.Enabled = true;
Run Code Online (Sandbox Code Playgroud)
我不能真正做一个foreach循环通过this.Controls因为一些控件是menustrip项目,工具条件,面板项目,滚动条,分割器等等,并且该循环不包括这个.
理想情况下,有一种方法可以在一个简单的循环中将每个控件的enabled属性设置为true,但我不知道如何做到这一点.有什么想法吗?
使用数据绑定:
更改mapLoaded为在其值已更改时通知观察者的属性...
public bool MapLoaded
{
get
{
return mapLoaded;
}
set
{
if (value != mapLoaded)
{
mapLoaded = value;
MapLoadedChanged(this, EventArgs.Empty);
}
}
}
private bool mapLoaded;
public event EventHandler MapLoadedChanged = delegate {};
// ^ or implement INotifyPropertyChanged instead
Run Code Online (Sandbox Code Playgroud)数据绑定控件的Enabled属性MapLoaded.您可以使用Windows窗体设计器或使用代码设置数据绑定,例如InitializeComponent();:
a.DataBindings.Add("Enabled", this, "MapLoaded");
b.DataBindings.Add("Enabled", this, "MapLoaded");
c.DataBindings.Add("Enabled", this, "MapLoaded");
Run Code Online (Sandbox Code Playgroud)