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

Joh*_*ith 3 c# loops winforms

目前在我的程序中有大约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,但我不知道如何做到这一点.有什么想法吗?

sta*_*ica 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
    
    Run Code Online (Sandbox Code Playgroud)
  2. 数据绑定控件的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)