Как я могу временно предотвратить получение фокуса/активации формы?

мое приложение открывает n форм, и пользователь может свободно переключаться между этими формами. Когда пользователь решает подтвердить операции, выполненные в одной из форм, я хотел бы заблокировать другие до тех пор, пока этот процесс (который потенциально может открывать MessageBoxes и/или другие формы) не завершится. Недостаточно отключить формы, так как пользователь ничего не может с ними сделать, но срабатывает событие Activated, а именно этого я и хочу избежать. Я попытался установить для ControlStyles.Selectable значение false для всех этих форм, но это не сработало.

Просто для большей наглядности формы занимают весь экран, поэтому пользователи активируют их нажатием на панель задач. Это ситуация, когда открытие модальной формы и выполнение там кода подтверждения не препятствует запуску события Activated.


person Francesco Baruchelli    schedule 10.05.2011    source источник


Ответы (2)


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

person Pankaj    schedule 10.05.2011
comment
Ммм, звучит хорошо, но недостаточно. Вы предлагаете открыть новую форму с помощью ShowDialog и выполнить работу подтверждения в показанном событии, верно? Таким образом, все остальные формы отключены, но я все еще могу их выбрать, и запускается событие Activated. И это именно то, чего я пытаюсь избежать. - person Francesco Baruchelli; 11.05.2011
comment
Я проверил это на своем конце, используя следующий подход. Я создал две формы в примере приложения. Форма1 и Форма2. В Form1 есть кнопка и событие активации формы. При нажатии кнопки открывается форма2 в диалоговом окне показа, и теперь я попытался щелкнуть форму1, которая лежит на задней стороне формы 2, это не делает активным событие активации формы1. Я проверил это с помощью точки останова, и контроль так и не прошел. Пожалуйста, подтвердите, подходит ли подход? - person Pankaj; 11.05.2011
comment
Спасибо Pankaj, вы правы, все работает так, как вы описываете. У меня это не сработало, так как я переключился на другую форму, нажав на панель задач Windows. - person Francesco Baruchelli; 11.05.2011
comment
это.Скрыть(); Форма2 f = новая форма2(); f.ШоуДиалог(); // При закрытии формы 2 снова устанавливаем видимость // в true this.Show(); - person Pankaj; 11.05.2011
comment
Хорошо, это работает. Я бы предпочел, чтобы это было видно, но с этим можно справиться. Спасибо - person Francesco Baruchelli; 11.05.2011

Попробуйте использовать метод Form.ShowDialog().

person sashaeve    schedule 10.05.2011