Я хотел бы закрыть модальную форму, когда пользователь щелкает за пределами (в любом месте на рабочем столе компьютера) модальной формы. Как мы можем это сделать, если модальная форма не предназначена для потери фокуса.
Закрытие модальной формы при щелчке мышью за пределами области формы
Ответы (3)
Вам нужно подключить мышь (и клавиатуру, если требуется) и зафиксировать их события. Затем проверьте, произошел ли щелчок за пределами формы (и области). Если да, отметьте табличку, которая может быть прочитана моделью формы, чтобы ее можно было закрыть.
Алгоритм:
Событие щелчка мыши.
Когда вызывается функция обратного вызова, проверьте позицию щелчка — находится ли она внутри вашей формы или нет (вам может потребоваться перевести местоположения в местоположения на рабочем столе — надеюсь, вы знаете, как это сделать!)
Если точка находится за пределами формы, установите флаг (логический или любой другой, который вас порадует). Убедитесь, что форма может как-то прочитать флаг.
Инициировать событие для захвата формы. В его обработчике считывается статус флага. Если true, закрыть/выгрузить форму.
На этой странице вы найдете технические подробности и функции.
Я не думаю, что вам нужно делать его модальным... тогда вы можете воспользоваться возможностью siride закрыть его в событии Deactivate
.
Причина, по которой вам не нужно делать его модальным: при первом отображении он будет в фокусе и будет самым верхним. Модальный режим не позволяет вам щелкнуть где-то еще, но вы хотите иметь возможность щелкнуть где-то еще... и когда вы это сделаете, форма исчезнет, поэтому модальные потребности не нужны.
Вот точное решение вашего вопроса:
http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C#