キーボードを押すと、KeyDown,離すとKeyUpイベントが発生します。
また、押下したキーボードが文字が出力された時は、KeyDownイベントの後に、KeyPressイベントが発生します。
KeyDownイベントのハンドラは、次のようにしてインストールします。
KeyDown += new KeyEventHandler(イベントハンドラ); ... void ハンドラ名(object 変数名, KeyEventArgs 変数名){}また、Controlクラスやその派生クラスではOnKeyDownメソッドをオーバーライドできます。
protected virtual void OnKeyDown ( KeyEventArgs e )KeyUpイベントについても同様です。
KeyEventArgsの主なプロパティは、次のようなものがあります。
メンバ | プロパティ値 | get/set | 意味 |
---|---|---|---|
Alt | bool | get | Altキーが押されたかどうか |
Control | bool | get | Ctrlキーが押されたかどうか |
Handled | bool | get/set | 規定の処理を省略する場合はtrue |
KeyCode | Keys | get | KeyDown,DeyUpイベントのキーボードコードを取得 |
KeyData | Keys | get | キーデータの取得 |
KeyValue | int | get | キーボード値の取得 |
Modifiers | Keys | get | Ctrl,Shift,Altキーのどの組み合わせが押されたかを取得(ビットごとのOR) |
Shift | bool | get | Shiftキーが押されたかどうか |
SuppressKeyPress | bool | get/set | キーイベントをコントロールに渡すかどうかの設定・取得 |
Keys列挙体は、多数のメンバが存在します。A,B,C...はAキー,Bキー,Cキーを表します。
AltはAltキー、Spaceはスペースキーなどそのままです。D0は0キー、NumPad0はテンキーの0キーです。
KeyPressイベントのハンドラは、次のようにしてインストールします。
KeyPress += new KeyPressEventHandler(イベントハンドラ); ... void ハンドラ名(object 変数名, KeyPressEventArgs 変数名){}Formクラスやその派生クラスではOnKeyPressメソッドをオーバーライドできます。
protected virtual void OnKeyPress ( KeyPressEventArgs e )KeyPressEventArgsのプロパティは次の通りです。
プロパティ | プロパティ値 | get/set | 意味 |
---|---|---|---|
Handled | bool | get/set | イベントが処理されたかどうかを示す値の取得・設定 |
KeyChar | char | get/set | 押されたキーに対応した文字の取得・設定 |
では、簡単なサンプルを見てみましょう。
// key01.cs using System; using System.Drawing; using System.Windows.Forms; class key01 : Form { string str = ""; public static void Main() { Application.Run(new key01()); } public key01() { Text = "猫でもわかるC#プログラミング"; BackColor = SystemColors.Window; } protected override void OnKeyDown(KeyEventArgs e) { base.OnKeyDown(e); str = "KeyCode: " + e.KeyCode.ToString() + "\n"; str += "KeyValue: " + e.KeyValue.ToString() + "\n"; str += "KeyData: " + e.KeyData.ToString() + "\n"; Invalidate(); } protected override void OnKeyPress(KeyPressEventArgs e) { base.OnKeyPress(e); str += "KeyChar: " + e.KeyChar; Invalidate(); } protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); Graphics g = e.Graphics; g.DrawString(str, Font, new SolidBrush(ForeColor), new PointF(10f, 10f)); } }では、実行結果を見てみましょう。
これは、Caps LockキーがOFFの時に、「A」キーを押したときのものです。
Shift + Aキーを押すと、左の図のようになります。
Update 30/Nov/2006 By Y.Kumei