Как предотвратить потерю фокуса WinForms?

Как предотвратить потерю фокуса моей «О форме» (без полей ввода, только кнопка «ОК»), чтобы заставить пользователя нажать «ОК»? Я пробовал Validation и ErrorProvider. Я также попытался делегировать Show, Activate и Focus следующим образом:

AboutForm myAboutForm = new AboutForm();
myAboutForm.Deactivate += delegate { myAboutForm.Show(); myAboutForm.Activate(); };
myAboutForm.Show();

но ничего не работает.


person Community    schedule 14.07.2011    source источник


Ответы (4)


Сделайте свою форму диалоговым окном Modal.

AboutForm myAboutForm = new AboutForm();
myAboutForm.ShowDialog();

Из MSDN — ShowDialog:

Отображает форму в виде модального диалогового окна.

person Oded    schedule 14.07.2011

Показать форму в виде модального диалога:

myAboutForm.ShowDialog();

person Adam Houldsworth    schedule 14.07.2011

Вам необходимо определить форму отмены как модальную. Модальное окно (согласно Википедии):

В дизайне пользовательского интерфейса модальное окно — это дочернее окно, которое требует, чтобы пользователи взаимодействовали с ним, прежде чем они смогут вернуться к работе с родительским приложением, что препятствует рабочему процессу в главном окне приложения. Модальные окна часто называют тяжелыми окнами или модальными диалоговыми окнами, потому что окно часто используется для отображения диалогового окна.

Например,

myAboutForm.ShowDialog(); вместо myAboutForm.Show(); так что:

AboutForm myAboutForm = new AboutForm();
myAboutForm.ShowDialog();

Узнайте больше на MSDN об отображении модальных и немодальных окон< / а>,

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

Наконец, я не уверен, что деактивировать работает так, как вы думаете, согласно MSDN:

Происходит, когда форма теряет фокус и больше не является активной формой.

и

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

person Community    schedule 14.07.2011

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

person hungryMind    schedule 14.07.2011