Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: CommunityОтветов: 4

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

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

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

focusforms

Ответы

Ответ 1 · рейтинг 10 · Oded

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

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

Из MSDN - ShowDialog:

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

Ответ 2 · рейтинг 3 · Adam Houldsworth

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

myAboutForm.ShowDialog();

Ответ 3 · рейтинг 3 · Community

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

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

Например,

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

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

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

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

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

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

и

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

Ответ 4 · рейтинг 1 · hungryMind

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы