KeyPressEventArgs クラス
アセンブリ: System.Windows.Forms (system.windows.forms.dll 内)
構文
KeyPressEventArgs は、ユーザーがキーを押すと作成される文字を指定します。たとえば、ユーザーが Shift キーを押しながら K キーを押した場合、KeyChar プロパティは大文字の K を返します。
ユーザーがキーを押すと KeyPress イベントが発生します。KeyPress イベントと密接に関連する 2 つのイベントは、KeyUp イベントと KeyDown イベントです。ユーザーがキーを押すと KeyDown イベントが各 KeyPress イベントに先行して発生し、ユーザーがキーを離すと KeyUp イベントが発生します。ユーザーがキーを押し続けると、文字が繰り返されるたびに複製された KeyDown イベントと KeyPress イベントが発生します。キーを離すと KeyUp イベントが 1 つ発生します。
各 KeyPress イベントに伴い KeyPressEventArgs が渡されます。KeyDown イベントと KeyUp イベントにおいて、それぞれ KeyEventArgs が渡されます。KeyEventArgs は、他のキーと共に任意の修飾子キー (Ctrl、Shift、または Alt) が押されたかどうかを指定します。(この修飾子情報は、Control クラスの ModifierKeys プロパティからも取得できます。)
Handled を true に設定して KeyPress イベントをキャンセルします。この結果、コントロールはキーを押す処理を行いません。
メモ |
---|
コントロールによっては、KeyDown で特定のキーストロークを処理するものがあります。たとえば、RichTextBox は、KeyPress が呼び出される前に Enter キーを処理します。このような場合、KeyPress イベントはキャンセルできず、代わりに KeyDown からキーストロークをキャンセルする必要があります。 |
キーが押された回数を KeyPressEventArgs を使用してカウントし、そのキーを押した結果を表示する方法を次の例に示します。表示後は、Handled を true に設定し、オペレーティング システムによるキーの処理が行われないようにします。この例は、フォームに TextBox が配置されていることを前提にしています。
public ref class myKeyPressClass { private: static long keyPressCount = 0; static long backspacePressed = 0; static long returnPressed = 0; static long escPressed = 0; TextBox^ textBox1; void myKeyCounter( Object^ sender, KeyPressEventArgs^ ex ) { switch ( ex->KeyChar ) { // Counts the backspaces. case '\b': backspacePressed = backspacePressed + 1; break; // Counts the ENTER keys. case '\r': returnPressed = returnPressed + 1; break; // Counts the ESC keys. case (char)27: escPressed = escPressed + 1; break; // Counts all other keys. default: keyPressCount = keyPressCount + 1; break; } textBox1->Text = String::Concat( backspacePressed, " backspaces pressed\r\n", escPressed, " escapes pressed\r\n", returnPressed, " returns pressed\r\n", keyPressCount, " other keys pressed\r\n" ); ex->Handled = true; } };
public class MyKeyPressClass { private static long keyPressCount = 0; private static long backspacePressed = 0; private static long returnPressed = 0; private static long escPressed = 0; private TextBox textBox1 = new TextBox(); private void MyKeyCounter(Object sender, KeyPressEventArgs ex) { switch(ex.get_KeyChar()) { // Counts the backspaces. case 'b' : backspacePressed = backspacePressed + 1; break; // Counts the ENTER keys. case 'r' : returnPressed = returnPressed + 1; break; // Counts the ESC keys. case (char)(27) : escPressed = escPressed + 1; break; default : // Counts all other keys. keyPressCount = keyPressCount + 1; break; } textBox1.set_Text(backspacePressed + " backspaces pressed\r\n" + escPressed + " escapes pressed\r\n" + returnPressed + " returns pressed\r\n"+keyPressCount + " other keys pressed\r\n"); ex.set_Handled(true); } //MyKeyCounter } //MyKeyPressClass
このクラスの新しいインスタンスを作成する必要があります。また、イベント ハンドラも設定する必要があります。イベント ハンドラは、クラスのコンストラクタで設定できます。
public: myKeyPressClass^ myKeyPressHandler; Form1() { myKeyPressHandler = gcnew myKeyPressClass; InitializeComponent(); textBox1->KeyPress += gcnew KeyPressEventHandler( myKeyPressHandler, &myKeyPressClass::myKeyCounter ); }
private MyKeyPressClass myKeyPressHandler = new MyKeyPressClass(); public Form1() { InitializeComponent(); textBox1.add_KeyPress(new KeyPressEventHandler(myKeyPressHandler. MyKeyCounter)); } //Form1
指定されたイベントがコントロール内で発生した場合、結び付けられたメソッドが呼び出され、アプリケーションがイベントに応答するコードを実行できます。
System.EventArgs
System.Windows.Forms.KeyPressEventArgs
プラットフォーム
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
KeyPressEventArgs メンバ
System.Windows.Forms 名前空間
OnKeyPress
Control.KeyPress イベント
KeyEventArgs クラス
Control.KeyDown イベント
Control.KeyUp イベント
Control.ModifierKeys プロパティ
- KeyPressEventArgs クラスのページへのリンク