Закрытие модальной формы при щелчке мышью за пределами области формы - PullRequest
0 голосов
/ 04 октября 2010

Я хотел бы закрыть модальную форму, когда пользователь нажимает за пределами (где угодно на рабочем столе компьютера) модальную форму. Как мы можем сделать это, так как модальная форма не означает потерю фокуса.

Ответы [ 3 ]

2 голосов
/ 04 октября 2010

Вам нужно подключить мышь (и клавиатуру, если требуется) и захватить их события. Затем проверьте, произошел ли щелчок за пределами формы (и области). Если да, отметьте знак, который может быть прочитан моделью, чтобы он мог закрыться.

Algo:

  1. Событие нажатия кнопки мыши.

  2. Когда вызывается функция обратного вызова, проверьте позицию щелчка - находится ли она в вашей форме или нет (вам может понадобиться перевести местоположения в местоположения рабочего стола - надеюсь, вы знаете, как!)

  3. Если точка находится за пределами формы, установите флажок (логическое значение или все, что делает вас счастливым). Убедитесь, что форма может каким-либо образом прочитать флаг.

  4. Запустить событие для захвата формы. В его обработчике читайте статус флага. Если это правда, закройте / выгрузите форму.

Эта страница расскажет вам технические детали и функции.

1 голос
/ 26 февраля 2013

Вот точное решение для вашего вопроса:

http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C#

1 голос
/ 04 октября 2010

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

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

...