回答:
どうやらこれについて多くの誤解があります!
間の唯一の実用的な違いKeyDownとはKeyPressつまりKeyPressキープレスから結果の文字リレー、および1がある場合にのみ呼び出されます。
つまり、Aキーボードを押すと、次の一連のイベントが発生します。
ただし、Shift+ を押すとA、次のようになります。
キーをしばらく押し続けると、次のような結果が得られます。
お知らせKeyPress発生の間に KeyDown及びKeyUp、いない後のKeyUp他の回答の多くが述べたように、KeyPress文字が生成されていないときに呼び出されていない、そしてそれはKeyDown他の回答の多くに反しても、キーを押している間繰り返されます。
結果として直接呼び出されないキーの例KeyPress:
キーの例ですへの呼び出しの結果KeyPress:
好奇心のために、KeyDown大まかに相関しWM_KEYDOWN、KeyPressへWM_CHAR、とKeyUpしますWM_KEYUP。 キーの繰り返し数よりも少ない数で呼び出すWM_KEYDOWN ことができますが、WinFormsが繰り返しごとに正確に1つのKeyDownを生成するために使用する繰り返しカウントを送信します。
ProcessDialogKeyときにオーバーライドしてfalseを返すと、(On)Key(Down | Press | Up)にTabキーが表示されます。keyDataKeys.TabKeys.Shift | Keys.Tab
KeyPressイベントは、非文字キーでは発生しません。ただし、非文字キーはKeyDownイベントとKeyUpイベントを発生させます。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx
KeyPressは印刷可能な文字によってのみ発生し、KeyDownイベントの後に発生します。入力遅延の設定によっては、複数のKeyDownイベントとKeyPressイベントがありますが、KeyUpイベントは1つだけです。
KeyDown
KeyPress
KeyUp
HandledプロパティはKeyUpでは機能しません(機能しませんSuppressKeyPress)。
Keydownはキーを離さずに押すことです。Keypressは完全な押して離すサイクルです。
言い換えると、KeyDown + KeyUp = Keypress
ブログ開発者から:
keydownとkeypressの違いを理解するには、「文字」と「キー」の違いを理解すると役立ちます。「鍵は」ながら、コンピュータのキーボード上の物理的なボタンである「文字」は、ボタンを押すことによって入力されたシンボルです。理論的には、keydownイベントとkeyupイベントはキーが押されたり離されたりしたことを表し、keypressイベントは入力された文字を表します。理論の実装は、すべてのブラウザで同じというわけではありません。
注:この概念を理解するために、Key Event Tester(上記のサイトで入手可能)を試すこともできます。
KEYUPは、押されたキーを離したときに、キーが押されている時間に関係なく1回だけキャプチャされます。そのため、そのようなプレスを1回だけキャプチャする場合は、KEYUPがキャプチャに適したイベントです。
KeyPressイベントは、入力から生成されたすべての文字に対して発生します。これは、物理的なキーを押したときの応答と、文字がオートリピート機能の結果であるときの両方です。キーボード入力の仕組みでは、この動作について説明しています。