Отключение элемента управления от получения события в C # - PullRequest
0 голосов
/ 05 мая 2009

У меня есть диалог с загрузками управления . Каждый элемент управления evey будет заполнен во время последовательности загрузки , и для его заполнения может потребоваться некоторое время. Между тем, я не хочу позволить пользователю нажать на любой из элементов управления. Другими словами, я хочу отключить элемент управления от получения событий, и я не хочу отключать элементы управления (как это может выглядеть странно). Также я не хочу подписываться и отписываться на события через регулярные промежутки времени. Можно ли как-то остановить элементы управления от прослушивания событий на короткое время?

Сударсан Шринивасан

Ответы [ 4 ]

4 голосов
/ 05 мая 2009

Весь смысл отключения элементов управления состоит в том, чтобы сообщить пользователю, что элемент управления не может использоваться в определенное время. Это соглашение, которое пользователи усвоили и привыкли, поэтому я бы посоветовал ему следовать. Если этого не сделать, пользователи могут запутаться.

Самый простой способ - отключить контейнер, в котором расположены элементы управления, а не отключать каждый элемент управления. Лучший способ (или, по крайней мере, тот, который я предпочитаю) - это метод, который будет управлять свойствами Visible и Enabled элементов управления, в зависимости от состояния, в котором находится пользовательский интерфейс.

2 голосов
/ 05 мая 2009

Самый простой способ - вывести контрольную группу из события загрузки (если это возможно). Затем в Load сделайте что-то вроде:

private bool _LoadComplete;

void OnFormLoad(Object sender, EventArgs e)
{
    _LoadComplete = true;
    InitializeControls();
    _LoadComplete = false;
}

void InitializeControls()
{
    // Populate Controls
}

void OnSomeControlEvent()
{
    if (_LoadComplete)
    {
         // Handle the event
    }
}

Редактировать Пара других идей:

  • Установите Application.Cursor = WaitCursor (обычно запрещает щелчок, но не 100% гарантию)
  • Создайте элемент управления «Spinner», чтобы пользователь знал, что экран занят. При загрузке переносите его вперед, чтобы он располагался сверху и закрывал все остальные элементы управления. Как только вы закончите загрузку, установите его в visible = false и покажите другие элементы управления
1 голос
/ 05 мая 2009

К сожалению, единственный известный мне способ состоит в том, чтобы иметь переменную класса (называемую что-то вроде _loading) и в каждом обработчике элемента управления делать что-то вроде:

If (! _loading )
{
    ...
}

И в вашем коде загрузки установите _loading = true;, как только вы закончите загрузку.

0 голосов
/ 05 мая 2009

Если вы просто хотите отключить пользовательский ввод, вы можете установить для свойства Enabled формы значение false.

В результате блокируется ввод данных пользователем для любого из элементов управления формы без изменения внешнего вида элементов управления; это техника, используемая внутри метода ShowDialog.

...