Каково будет ожидаемое поведение для окна, которое скрывается при нажатии клавиши - PullRequest
1 голос
/ 17 ноября 2008

Это субъективный вопрос, но мне нужны мнения.

У меня есть приложение WinForms C #, окно которого скрывается после определенного нажатия клавиши (Enter или Escape) с возможными модификаторами (например, Ctrl-Enter). При скрытии KeyDown или KeyPress другое приложение, которое становится активным после того, как мое окно скрывается, получает событие KeyUp для этого нажатия клавиши. Обычно это не должно влиять на это другое приложение, но некоторые из них реагируют на KeyUp. Например, TweetDeck отправляет сообщение, которое в данный момент редактируется, с помощью «Enter» KeyUp, даже если он не получил KeyDown / KeyPress.

Так что я подумал, хорошо, я буду хорошим гражданином, я буду прятаться в KeyUp. Но это не правильно. Если я только ищу ключи, я делаю то, что виню в этом других! Если я пытаюсь создать историю соответствия KeyDown / KeyUp, я чрезмерно усложняю свой код (модификаторы генерируют свой собственный ключ).

Что мне делать? Что должно делать хорошо реализованное приложение?

Ответы [ 3 ]

2 голосов
/ 17 ноября 2008

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

В качестве альтернативы, вы можете просто «съесть» ключ из очереди сообщений после того, как вы получили ключ вниз?

Я бы не стал сильно беспокоиться о том, что приложения обрабатывают клавишу «вверх», а не клавишу «вниз» - как вы отметили - единственная причина, по которой это проблема, заключается в том, что ваше приложение меняет активные окна в середине последовательности нажатий клавиш «вверх». Это ваша ответственность (IMO), чтобы также «съесть» сообщения о ключах. Вероятно, вы можете просто нажимать клавишу вверх вместо клавиши вниз без побочных эффектов.

EDIT

Думая об этом дальше - при выполнении alt-tab для перехода в новое окно - действие не происходит, пока не нажата клавиша. В то же время он показывает окно возможных приложений для изменения. Вы можете сделать подобное действие, и у поведения есть прецедент.

Итак: При нажатии клавиши: окно дисплея, которое указывает, что приложение будет скрыто. при ключе вверх: скрыть окно

Это «с состоянием» - вы можете скрыться, только если вы получили ключ вниз и ключ вверх - по крайней мере, это то, что я бы сделал. 99,9999% (угадайте), не обрабатывая ключ, было бы хорошо.

0 голосов
/ 17 ноября 2008

Я не могу представить ни одну программу, которая реализует сочетания клавиш в событии KeyUp Этот стандарт был установлен очень давно с помощью функции Windows TranslateAccelerator () API. Это переводит WM_KEYDOWN. Windows Forms реализует то же поведение с ProcessCmdKey ().

Звучит так, как будто вы нашли дурака. Правильно ли он обрабатывает Alt + F4?

0 голосов
/ 17 ноября 2008

Ну, я бы сказал: "Не беспокойся об этом, пока это не станет проблемой", но я думаю, что сейчас это проблема ...

В этом случае я бы прятался за KeyPress (ожидаемый пользовательский опыт), но захватывал фокус, пока не получит KeyUp (или пока короткий таймаут).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...