В .Net, что является лучшим выбором для кодирования нажатий клавиш на клавиатуре, нажатия клавиш или нажатия клавиш? - PullRequest
3 голосов
/ 04 ноября 2008

Являются ли эти два события одинаковыми или есть различия, на которые следует обратить внимание при кодировании нажатий клавиатуры?

Ответы [ 7 ]

5 голосов
/ 04 ноября 2008

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

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

Например, попробуйте нажать клавишу в Блокноте, и вы увидите, что ВНИЗ вызывает реакцию в Блокноте. Это не ждет UP.

3 голосов
/ 04 ноября 2008

Неважно, является ли он .Net или нет, важно, что ожидает пользователь. Кейдаун - хорошее время, чтобы ответить на четыре клавиши со стрелками. Ввод символов - хорошее время для ответа на ввод видимых символов. Keyup - это обычно хорошее время, чтобы ответить на любое действие, которое окажет влияние на документ, но keydown будет лучше, если это игра, в которой пользователь хочет немедленного эффекта.

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

Это на самом деле не "что является лучшим выбором для .NET".

Вам действительно нужно подумать о том, как вы хотите реагировать на нажатия клавиш. Если вы хотите, чтобы кто-то печатал в текстовом поле, обычно лучше подождать, пока он выйдет, прежде чем пытаться решить, что он делает. Но если это что-то наподобие игры, в которой вы хотите реагировать на нажатие кнопки, вы можете использовать KeyDown.

KeyDown - это момент нажатия клавиши. KeyUp - после того, как ключ был выпущен.

1 голос
/ 04 ноября 2008

Стоит учесть, что раньше у меня была проблема:

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

Это случилось со мной на моей последней работе. У нас был элемент управления формы, который при нажатии клавиши загружал новую форму. Если новая форма загружается достаточно быстро, то новая форма получает фокус, прежде чем пользователь отпустит ключ, и новая форма получит событие key up. У нас был элемент управления пользовательского интерфейса в той 2-й форме, который реагировал на ввод ключа, и иногда он вызывался непреднамеренно.

Мораль этой истории такова; держите это последовательным. Выберите один или другой и придерживайтесь его:)

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

Я почти всегда использую KeyDown, потому что тогда я могу использовать e.Handled = True и остановить keyevent для перемещения из текстового поля в контейнер и вниз в eventque, если я хочу. Вы также можете использовать e.Handled в KeyUp, но затем «поздно», потому что ключ, введенный пользователем, будет виден в текстовом поле, и вам придется убрать его вручную, если вы, например, хотите запретить пользователю вводить цифры в текстовое поле.

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

Еще одна вещь, которую нужно учитывать: при удерживании модификаторов важно использовать keydown. Я обычно использую keydown, чтобы установить переменную типа ctrlPressed=true; затем используйте keyup для сброса этой переменной ctrlPressed=false;

Я обычно использую keyPressed для всех буквенно-цифровых символов.

Система такого типа позволяет вам включать такие вещи, как CTRL + K + Cla a Visual Studio

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

Событие нажатия клавиши происходит, как только пользователь нажимает клавишу, событие нажатия клавиши происходит, когда они отпускают клавишу после ее нажатия.

Так что, если вы используете событие key up, а пользователь нажимает клавишу и удерживает ее в течение 5 секунд, ничего не произойдет, пока они не отпустят его.

(Примечание: я ничего не знаю о .net, я только что использовал события key up и key down в других библиотеках.)

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