この章では、キーボード関連のイベントについて解説します。
キーボードを押すと、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