C # Предотвращение кликов в форме без использования Enabled = false - PullRequest
3 голосов
/ 22 сентября 2011

У меня есть форма, которая требует длительной операции (расширение узла дерева просмотра ищет в сети дополнительные элементы, чтобы создать больше узлов дерева) - поэтому я планирую использовать BackgroundWorker для этой задачи. Во время длительной операции я хочу, чтобы курсор был курсором ожидания, и я хочу, чтобы вся форма была не щелкаемой, кроме кнопки Отмена. Я знаю, что мог бы использовать Enabled = false, но это превращает дерево в серый цвет, который выглядит довольно отстойно.

Я мог бы просто НЕ использовать BW, но это значит, что я должен использовать DoEvents, чтобы заставить курсор меняться, и, возможно, появится сообщение «Не отвечает», что я ненавижу.

Я думал об обработке всех событий щелчка мыши и событий клавиатуры, чтобы они были отменены, если BW занят ... таков мой текущий план. Мне просто интересно, что я что-то упускаю, есть ли другой способ.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 22 сентября 2011

Нет простого способа сделать это. Лучше исправить вид дерева и использовать свойство Enabled. Вы также можете показать свой индикатор прогресса в модальном диалоговом окне, которое заблокирует пользовательский интерфейс

0 голосов
/ 22 сентября 2011

Вы можете использовать Фоновый рабочий и открыть другое диалоговое окно с индикатором выполнения, который показывает текущий прогресс и кнопку отмены.Где вы можете пользователь

popup = new ProgressWindow();
popup.Owner=this;
popup.show();

И кнопка отмены отменит фоновый рабочий.Таким образом, ваша форма возврата не будет кликабельной, а всплывающее окно останется сверху с кнопкой отмены.

0 голосов
/ 22 сентября 2011

Вы можете использовать Panel как наложение поверх формы, полностью или частично прозрачное, которое распространяет щелчки только при нажатии кнопки отмены - аналогично тому, как браузеры имитируют модальные окна, «седая» фон с наложением .

Когда вы находитесь в режиме обработки, установите Z-порядок маски так, чтобы он находился перед всеми другими элементами управления, а когда это закончится, установите его позади них.

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