第46章 キーボード入力


この章では、キーボード関連のイベントについて解説します。



キーボードを押すと、KeyDown,離すとKeyUpイベントが発生します。

また、押下したキーボードが文字が出力された時は、KeyDownイベントの後に、KeyPressイベントが発生します。

KeyDownイベントのハンドラは、次のようにしてインストールします。

KeyDown += new KeyEventHandler(イベントハンドラ);
...
void ハンドラ名(object 変数名, KeyEventArgs 変数名){}
また、Controlクラスやその派生クラスではOnKeyDownメソッドをオーバーライドできます。
protected virtual void OnKeyDown (
	KeyEventArgs e
)
KeyUpイベントについても同様です。

KeyEventArgsの主なプロパティは、次のようなものがあります。

メンバプロパティ値 get/set意味
AltboolgetAltキーが押されたかどうか
ControlboolgetCtrlキーが押されたかどうか
Handledboolget/set規定の処理を省略する場合はtrue
KeyCodeKeysgetKeyDown,DeyUpイベントのキーボードコードを取得
KeyDataKeysgetキーデータの取得
KeyValueintgetキーボード値の取得
ModifiersKeysgetCtrl,Shift,Altキーのどの組み合わせが押されたかを取得(ビットごとのOR)
ShiftboolgetShiftキーが押されたかどうか
SuppressKeyPressboolget/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意味
Handledboolget/setイベントが処理されたかどうかを示す値の取得・設定
KeyCharcharget/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キーを押すと、左の図のようになります。




[C# フォーム Index] [C# コンソール Index] [総合Index] [Previous Chapter] [Next Chapter]

Update 30/Nov/2006 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。