Как предотвратить потерю фокуса моей "О форме" (без полей ввода, только кнопка "ОК"), чтобы заставить пользователя нажать "ОК"? Я пробовал Validation и ErrorProvider. Я также попытался делегировать Show, Activate и Focus следующим образом:
AboutForm myAboutForm = new AboutForm();
myAboutForm.Deactivate += delegate { myAboutForm.Show(); myAboutForm.Activate(); };
myAboutForm.Show();
но ничего не работает.
Ответ 1 · рейтинг 10 · Oded
Сделайте свою форму диалоговым окном Modal.
AboutForm myAboutForm = new AboutForm();
myAboutForm.ShowDialog();
Из MSDN - ShowDialog:
Отображает форму в виде модального диалогового окна.
Ответ 3 · рейтинг 3 · Community
Вам необходимо определить форму отмены как модальную. Модальное окно (согласно Википедии):
В дизайне пользовательского интерфейса модальное окно - это дочернее окно, которое требует, чтобы пользователи взаимодействовали с ним, прежде чем они смогут вернуться к работе с родительским приложением, что препятствует рабочему процессу в главном окне приложения. Модальные окна часто называют тяжелыми окнами или модальными диалоговыми окнами, потому что окно часто используется для отображения диалогового окна.
Например,
myAboutForm.ShowDialog(); вместо myAboutForm.Show(); так что:
AboutForm myAboutForm = new AboutForm();
myAboutForm.ShowDialog();
Узнайте больше на MSDN об отображении модальных и немодальных окон,
Модальная форма или диалоговое окно должны быть закрыты или скрыты, прежде чем вы сможете продолжить работу с остальной частью приложения.
Наконец, я не уверен, что деактивировать работает так, как вы думаете, согласно MSDN:
Происходит, когда форма теряет фокус и больше не является активной формой.
и
Это событие можно использовать для выполнения таких задач, как обновление другого окна приложения данными из деактивированной формы.
Ответ 4 · рейтинг 1 · hungryMind
В Windows рабочий стол имеет наивысший приоритет. Вы не можете заблокировать доступ пользователя к рабочему столу, если ваше приложение запущено. Тем не менее, есть хитрости, чтобы сделать это. Вы просто устанавливаете самое верхнее свойство формы, так что пользователь всегда будет видеть поверх всех приложений. ShowDialog будет держать вашу форму поверх вашего приложения.