Яка різниця між подіями KeyDownта KeyPressподіями в Росії .net?
Яка різниця між подіями KeyDownта KeyPressподіями в Росії .net?
Відповіді:
Мабуть, багато непорозумінь з цього приводу!
Єдина практична відмінність між KeyDownі KeyPressполягає в тому, що KeyPressретрансляція символу, що виникає в результаті натискання клавіші, і викликається лише за наявності.
Іншими словами, якщо натиснути Aна клавіатурі, ви отримаєте таку послідовність подій:
Але якщо натиснути Shift+ A, ви отримаєте:
Якщо деякий час утримувати клавіші, ви отримаєте щось на зразок:
Зверніть увагу , що KeyPressвідбувається між ними KeyDown і KeyUp, НЕ після KeyUp, як багато інших відповіді заявили, що KeyPressне викликається , коли персонаж не генерується, і що KeyDownповторюється , поки клавіша утримується в натиснутому положенні , а також в відміну від багатьох інших відповідей .
Приклади клавіш, які не призводять безпосередньо до дзвінків на KeyPress:
Приклади клавіш, які призводять до дзвінків на KeyPress:
Для допитливих KeyDownприблизно відповідає WM_KEYDOWN, KeyPressдо WM_CHAR, і KeyUpдо WM_KEYUP. WM_KEYDOWN можна назвати меншою за кількість повторень ключів, але він надсилає кількість повторів, які, IIRC, WinForms використовує для генерування рівно одного KeyDown за повтор.
ProcessDialogKeyі повернете помилкове значення, коли keyDataце Keys.Tabабо Keys.Shift | Keys.Tab, тоді ви побачите клавішу Tab в клавіші (On) (Вниз | Натисніть | Вгору).
Подія KeyPress не піднімається нехарактерними клавішами; однак, нехарактерні клавіші дійсно викликають події KeyDown та KeyUp.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx
KeyPress запускається тільки символами для друку та запускається після події KeyDown. Залежно від налаштувань затримки введення тексту може бути декілька подій KeyDown та KeyPress, але лише одна KeyUp подія.
KeyDown
KeyPress
KeyUp
KeyPress - вищий рівень абстракції, ніж KeyDown (та KeyUp). KeyDown та KeyUp пов'язані з обладнанням: фактична дія клавіші на клавіатурі. KeyPress - це більше "Я отримав символ з клавіатури".
Від MSDN:
Ключові події відбуваються у такому порядку:
Крім того, KeyPress надає вам можливість оголосити дію як " оброблювану ", щоб не допустити нічого робити.
Handledвластивість не працює для KeyUp ( SuppressKeyPressтакож не працює).
Я завжди думав, що натискання клавіші відбувається, як тільки ви натискаєте клавішу вниз, натискання клавіші - це дія натискання клавіші та відпускання її.
Я знайшов це, що дає дещо інше пояснення: http://bytes.com/topic/net/answers/649131-difference-keypress-keydown-event
Клавіатура натискає клавішу, не відпускаючи її, клавіша - це повний цикл натискання та випуску.
По-іншому, KeyDown + KeyUp = Keypress
Від розробника блогів :
Щоб зрозуміти різницю між клавіатурою та натисканням клавіші, корисно зрозуміти різницю між "символом" і "клавішею" . «Ключ» є фізичною кнопкою на клавіатурі комп'ютера в той час як «символ» є символ набраний натисканням кнопки. Теоретично події клавіш і клавіш являють собою клавіші, які натискаються або відпускаються, тоді як подія натискання клавіші являє собою символ, який вводиться. Реалізація теорії однакова у всіх браузерах.
Примітка. Ви також можете спробувати тестер ключових подій (доступний на вищезгаданому сайті), щоб зрозуміти цю концепцію.
KEYUP буде захоплено лише один раз, після відпуску натиснутої клавіші, незалежно від того, як довго буде утримуватися клавіша, тому якщо ви хочете зафіксувати такий натиск лише один раз, KEYUP є підходящим заходом для зйомки.
KeyPressПодія виникає для кожного символу , що генерується від входу, як у відповідь на преси фізичних ключовими, а також , коли персонаж є результатом функції автоповтора. Як працює введення клавіатури, документує цю поведінку.
Найпростіше пояснення:
Я затримав кнопку "d" на секунду, а потім відпустив.
дддддд
подія клавіші траплялася один раз до появи на екрані першого d, подія натискання клавіші сталася 6 разів, а подія клавіатури траплялася після того, як на екрані з'явився останній d.