1. ホーム
  2. .net

[解決済み】.NETのKeyDownとKeyPressの違いは何ですか?

2022-04-14 13:03:47

質問

の違いは何ですか? KeyDownKeyPress のイベントは、.NETでは?

どのように解決するのですか?

があるようです。 たくさん という誤解があるようです。

との唯一の実用的な違いは KeyDownKeyPress は、その KeyPress は、キー入力による文字を中継し、文字がある場合にのみ呼び出されます。

言い換えれば、もしあなたが A をキーボードで入力すると、このような一連のイベントが発生します。

  1. KeyDown: KeyCode=Keys.A、KeyData=Keys.A、Modifiers=Keys.None
  2. キープレス KeyChar='a'
  3. キーアップ キーコード=Keys.A

しかし、もしあなたが シフト + A を、得ることができます。

  1. KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
  2. KeyDown: KeyCode=Keys.A, KeyData=Keys.A | Keys.Shift, Modifiers=Keys.Shift
  3. キープレス KeyChar='A'
  4. キーアップ キーコード=Keys.A
  5. キーアップ キーコード=Keys.ShiftKey

キーをしばらく押し続けると、次のようになります。

  1. KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
  2. KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
  3. KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
  4. KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
  5. KeyDown: KeyCode=Keys.ShiftKey, KeyData=Keys.ShiftKey, Shift, Modifiers=Keys.Shift
  6. KeyDown: KeyCode=Keys.A, KeyData=Keys.A | Keys.Shift, Modifiers=Keys.Shift
  7. キープレス KeyChar='A'
  8. KeyDown: KeyCode=Keys.A, KeyData=Keys.A | Keys.Shift, Modifiers=Keys.Shift
  9. キープレス KeyChar='A'
  10. KeyDown: KeyCode=Keys.A, KeyData=Keys.A | Keys.Shift, Modifiers=Keys.Shift
  11. キープレス KeyChar='A'
  12. KeyDown: KeyCode=Keys.A, KeyData=Keys.A | Keys.Shift, Modifiers=Keys.Shift
  13. キープレス KeyChar='A'
  14. KeyDown: KeyCode=Keys.A, KeyData=Keys.A | Keys.Shift, Modifiers=Keys.Shift
  15. キープレス KeyChar='A'
  16. キーアップ キーコード=Keys.A
  17. キーアップ キーコード=Keys.ShiftKey

注目すべきは KeyPress が発生します。 の間に KeyDownKeyUp , ない KeyUp 他の多くの回答者が述べているように、その KeyPress は文字が生成されていないときには呼び出されないし KeyDown が、キーを押している間、繰り返されることも、他の多くの回答とは異なります。

するキーの例 ない を直接呼び出すことになります。 KeyPress :

  • シフト , Ctrl , Alt
  • F1 を通して F12
  • 矢印キー

となるキーの例 する を呼び出した結果 KeyPress :

  • A を通して Z , 0 を通して 9 など。
  • スペースバー
  • タブ (KeyChar='\t', ASCII 9)
  • 入力 (KeyChar='\r', ASCII 13)
  • エスケープ (KeyChar='\x1b', ASCII 27)
  • バックスペース (KeyChar='\b', ASCII 8)

好奇心旺盛なあなたへ。 KeyDown とほぼ同じです。 WM_KEYDOWN , KeyPress から WM_CHAR となります。 KeyUp から WM_KEYUP . WM_KEYDOWN はキーの繰り返しの数より少なく呼ばれるが、それは繰り返しのカウントを送る、IRC、WinFormsは繰り返しごとに正確に1つのKeyDownを生成するためにそれを使う。