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