目前在我的程序中有大约10个控件事件处理程序,我有这个代码:
if (!mapLoaded)
return;
当我通过打开文件对话框加载地图时,我将mapLoaded设置为true。另一种方法是禁用启动时的所有控件,并在加载地图后启用所有控件。不幸的是,有30多个控件,这只是30行..
a.Enabled = true;
b.Enabled = true;
c.Enabled = true;
我无法真正通过this.Controls进行控制,因为某些控件是menustrip项目,工具条项目,面板项目,滚动条,分割器等等,并且该循环不包含该内容。
理想情况下,有一种方法可以在一个简单的循环中将每个控件的enabled属性设置为true,但我不知道如何做到这一点。有什么想法吗?
答案 0 :(得分:7)
使用数据绑定:
将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
将控件的Enabled
属性数据绑定到MapLoaded
。您可以使用Windows窗体设计器或使用代码来设置数据绑定,例如在InitializeComponent();
之后:
a.DataBindings.Add("Enabled", this, "MapLoaded");
b.DataBindings.Add("Enabled", this, "MapLoaded");
c.DataBindings.Add("Enabled", this, "MapLoaded");
答案 1 :(得分:2)
如何更改您的初始策略,有一个新表单让您的用户加载地图,而只是在加载主表单之前不加载它?