Как отключить управление, пока не будет выполнено условие? - PullRequest
3 голосов
/ 13 августа 2011

В настоящее время в моей программе около 10 обработчиков событий управления, у меня есть этот код:

        if (!mapLoaded)
            return;

Когда я загружаю карту через диалог открытия файла, я устанавливаю для mapLoaded значение true. Другой способ сделать это - просто отключить все элементы управления для запуска и после загрузки карты включить все элементы управления. К сожалению, есть более 30 элементов управления, и это всего лишь 30 строк ..

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

Я не могу сделать цикл foreach через это. Также можно управлять, потому что некоторые элементы управления - это элементы меню, элементы панели инструментов, элементы панели, полосы прокрутки, разделители и так далее, и этот цикл не покрывает это.

В идеале был бы способ установить для свойства каждого элемента управления значение true в одном простом цикле, но я не уверен, как это сделать. Есть идеи ТАК?

Ответы [ 2 ]

7 голосов
/ 13 августа 2011

Использовать привязку данных:

  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");
    
2 голосов
/ 13 августа 2011

Как насчет изменения стратегии открытия, иметь новую форму, которая позволяет вашему пользователю загружать карту, и просто не загружать основную форму, пока она не будет загружена?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...