ボタンをクリックしたときに処理をする
using System;
using System.Windows.Forms;
using System.Drawing;
namespace lesson6
{
class sample2 : Form
{
private Label lb;
private Button bt;
static void Main(string[] args)
{
Application.Run(new sample2());
}
public sample2()
{
this.Text = "lesson6";
this.Width = 300; this.Height = 200;
lb = new Label();
lb.Text = "ようこそ";
lb.Width = 150;
bt = new Button();
bt.Text = "いらっしゃいませ";
bt.Top = this.Top + lb.Height;
bt.Width = lb.Width;
bt.Parent = this;
lb.Parent = this;
bt.Click += new EventHandler(bt_Click); //②イベントハンドラを登録します
}
public void bt_Click(Object sender, EventArgs e) //①イベントハンドラを設計します
{
lb.Text = "ありがとうございます";
}
}
}
実行画面
→「いらっ惜ししゃいませ」ボタン押し 
このプログラムでは、ボタンをクリックすると、ラベルのテキストが変換されるようになっています。このコードでは、ボタンをクリックしたと言う操作を、イベントとして扱っているからです。
カーソルが出入りしたときのコードを記述する
ではもう一つ、異なるイベント処理をしてみましょう。今度は「マウスのカーソルがフォームの上に入った」「出た」というイベントに対応したプログラムを作成します。
using System;
using System.Windows.Forms;
using System.Drawing;
namespace lesson6
{
class sample3 : Form
{
private static Form fm;
private static Label lb;
static void Main(string[] args)
{
fm = new Form();
fm.Text = "lesson6";
fm.Width = 300; fm.Height = 200;
lb = new Label();
lb.Text = "ようこそ";
lb.Parent = fm;
fm.MouseEnter += new EventHandler(fm_MouseEnter); //②イベントハンドラを登録します
fm.MouseLeave += new EventHandler(fm_MouseLeave); //②イベントハンドラを登録します
Application.Run(fm);
}
public static void fm_MouseEnter(Object sender, EventArgs e) //①イベントハンドラを設計します
{
lb.Text = "こんにちは";
}
public static void fm_MouseLeave(Object sender, EventArgs e) //①イベントハンドラを設計します
{
lb.Text = "さようなら";
}
}
}
実行画面
→カーソルが入ったとき 
キーを入力したときに処理をする
ここまでのプログラムでは、マウスを操作したときのイベントを処理しました。しかし中には、キーボードから入力をしたときに処理を行いたい場合もあるかもしれません。今度はキーを入力したときのイベント処理を行ってみることにしましょう。
using System;
using System.Windows.Forms;
using System.Drawing;
namespace lesson6
{
class sample4 : Form
{
private Label lb1, lb2;
static void Main(string[] args)
{
Application.Run(new sample4());
}
public sample4()
{
this.Text = "lesson6";
this.Width = 300; this.Height = 200;
lb1 = new Label();
lb1.Text = "矢印キーでお選びください";
lb1.Width = this.Width;
lb2 = new Label();
lb2.Top = lb1.Bottom;
lb1.Parent = this;
lb2.Parent = this;
this.KeyDown += new KeyEventHandler(fm_KeyDown);
}
public void fm_KeyDown(object sender, KeyEventArgs e)
{
String str;
switch (e.KeyCode)
{
case Keys.Up:
str = "上";break;
case Keys.Down:
str = "下"; break;
case Keys.Left:
str = "左"; break;
case Keys.Right:
str = "右"; break;
default:
str="ほかのキー"; break;
}
lb2.Text = str + "ですね";
}
}
}
実行画面
↑を押した結果 
ここでは矢印キーを押したときに、キーの方向を表示するプログラムを作成しました。
ここではイベントハンドラの登録に、KeyEventHandler()デリゲートを使います。入力したキーの種類は引数として渡されたのKeyCodeのプロパティを調べればわかります。調べるキーの種類はKeys.XXで指定できます。
| 種類 | 説明 |
|---|---|
| Up | ↑ |
| Down | ↓ |
| Left | ← |
| Right | → |
| Enter | Enterキー |
| Space | スペースキー |
| A~Z | Aキー~Zキー |
| D0~D9 | 0キー~9キー |
列挙体の仕組みを知る
なお、ここで使ったKeysの名前でまとめられた値は、列挙体(enumeration)と呼ばれています。列挙体は「列挙体.メンバ」で値を表せるように値をまとめたもので、覚えにくい値をわかりやすいメンバ名で表すことができます。
ここでは、enumで定義されているKeys列挙体のUpメンバーの値を、Keys.Upで指定できるわけです。
構文:列挙体の定義
enum 列挙体名{メンバ1 = 値, メンバ2 = 値…};
構文:列挙体の利用
列挙体名.メンバ名
イベント処理の種類を知る
さて、このように、イベント処理を行うコードを記述すれば、プログラムに様々な動きをつけることができるようになります。
次の表に代表的なイベントを挙げておきましょう。私たちはこれからのサンプルでも、様々なイベント処理を行っていきます。わからなくなった場合は、この表に戻って確認してみると良いでしょう。
| ソース | イベント | 説明 | 登録するデリゲート・イベントハンドラの引数 |
|---|---|---|---|
| Formなど各種コントロール | Click | クリックした | EventHandler(Object sender, EventArgs e) |
| MouseEnter | マウスカーソルが入った | EventHandler(Object sender, EventArgs e) | |
| MouseLeave | マウスカーソルが出た | EventHandler(Object sender, EventArgs e) | |
| MouseUp | マウスをはなした | MouseEventHandler(Object sender, MouseEventArgs e) | |
| MouseDown | マウスを押した | MouseEventHandler(Object sender, MouseEventArgs e) | |
| MouseMove | マウスを動かした | MouseEventHandler(Object sender, MouseEventArgs e) | |
| KeyUp | キーを上げた | KeyEventHandler(Object sender, keyEventArgs e) | |
| KeyDown | キーをはなした | KeyEventHandler(Object sender, keyEventArgs e) | |
| KeyPress | キーを押した | KeyPressHandler(Object sender, keyEventArgs e) | |
| Paint | 描画する必要が起こった | PaintPressHandler(Object sender, PaintEventArgs e) | |
| CheckBox | CheckedChanged | チェックが変更された | EventHandler(Object sender, EventArgs e) |
| ListBox、ComboBox | SelectdIndexChanged | 選択項目が変更された | EventHandler(Object sender, EventArgs e) |
| Timer | Tick | 一定時間が経過した | EventHandler(Object sender, EventArgs e) |

コメント