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

时间:2011-08-13 18:26:04

标签: c# winforms loops

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

        if (!mapLoaded)
            return;

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

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

我无法真正通过this.Controls进行控制,因为某些控件是menustrip项目,工具条项目,面板项目,滚动条,分割器等等,并且该循环不包含该内容。

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

2 个答案:

答案 0 :(得分:7)

使用数据绑定:

  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窗体设计器或使用代码来设置数据绑定,例如在InitializeComponent();之后:

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

答案 1 :(得分:2)

如何更改您的初始策略,有一个新表单让您的用户加载地图,而只是在加载主表单之前不加载它?