繁体   English   中英

如何在满足条件之前禁用控件?

[英]How to disable controls until a condition is met?

目前在我的程序中大约 10 个控制事件处理程序中,我有以下代码:

        if (!mapLoaded)
            return;

当我通过打开文件对话框加载 map 时,我将 mapLoaded 设置为 true。 另一种方法是禁用所有启动控件,然后加载 map 以启用所有控件。 不幸的是,有 30 多个控件,而这只是 30 行..

a.Enabled = true;
b.Enabled = true;
c.Enabled = true;

我不能真正通过 this.Controls 进行 foreach 循环,因为某些控件是菜单条项、工具条项、面板项、滚动条、拆分器等,并且该循环不包括这些。

理想情况下,有一种方法可以在一个简单的循环中将每个控件的 enabled 属性设置为 true,但我不知道该怎么做。 有什么想法吗?

使用数据绑定:

  1. 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
  2. 将控件的Enabled属性数据绑定到MapLoaded 您可以使用 Windows Forms 设计器或使用代码设置数据绑定,例如在InitializeComponent();

     a.DataBindings.Add("Enabled", this, "MapLoaded"); b.DataBindings.Add("Enabled", this, "MapLoaded"); c.DataBindings.Add("Enabled", this, "MapLoaded");

改变你的打开策略怎么样,有一个新的表单让你的用户加载一个 map,并且在加载之前不加载你的主表单?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM