動きのあるプログラムを作成する
これまで様々なプログラムを作成してきました。クラスについても理解を深めることができました。しかし、これまでに作成したプログラムでは、プログラムの起動後に何か目に見える動きが起こる事はありませんでした。私たちはさらにクラスの機能を利用して、バリエーションに富んだプログラムを作成していくことにします。
ユーザがウィンドウを操作したときに、何か処理をするプログラム
を作成していくことにしましょう。
例えば、
ユーザがフォームをクリックしたときに、ラベルのテキストが変わるプログラム
というと動きのあるプログラムを作成するわけです。
イベント処理の仕組みを知る
最初に。「ユーザが操作したときに、何か処理をする」というプログラムの仕組みについて、学んでおくことにしましょう。
ウィンドウを持つプログラムでは通常、「フォームをクリックした」と言ったユーザの操作を、イベント(event)と言う概念を扱うことになってます。イベントの発生元となるコントロールは、ソース(source)と呼ばれてます。つまり、「フォームをクリックした」というイベントを考えるときには、フォームがソースとなるわけです。
発生したイベントは、イベントハンドラ(event handler)と呼ばれるメソッドで処理することになります。

ユーザからの入力操作などを表すクラスをイベントと呼ぶ。
イベントを発行するクラスをソースと呼ぶ。
イベントを処理するメソッドをイベントハンドラと呼ぶ。
イベント処理を記述する

まず①ではイベントハンドラに適当な名前をつけて定義します。例えば、fm_Click()と言う名前でメソッドを定義しておきましょう。フォームをクリックしたときに処理するという意味の名前にしてみます。
名前は識別子から適当に選んでかまいませんが、このイベントハンドラにはobjectとEventArgsと言う2種類の決まったクラスの引数を持たせる必要になります。
イベントを処理するためには、イベントハンドラを定義する。
デリゲートによって、ソースにイベントハンドラを登録する。
using System;
using System.Windows.Forms;
using System.Drawing;
namespace lesson6
{
class sample1 : Form
{
private Label lb;
static void Main(string[] args)
{
Application.Run(new sample1());
}
public sample1()
{
this.Text = "lesson6";
this.Width = 200; this.Height = 200;
lb = new Label();
lb.Text = "ようこそ";
lb.Parent = this;
this.Click += new EventHandler(fm_Click); //②イベントハンドラを登録します
}
public void fm_Click(Object sender, EventArgs e) //①イベントハンドラを設計します
{
lb.Text = "こんにちは";
}
}
}
実行画面


デリゲートの仕組みを知る
なお、このイベント処理の仕込みは、クラスライブラリの中で次のように記述されています。
まず、イベントはソースで定義され、発生させられます。デリケートによって、このイベントを処理するべきイベントハンドラの引数のリストが宣言されてます。
構文:デリゲートの宣言
public void delegate デリゲート名(イベントハンドラの引数のリスト);
class ソースクラス名
{
public event デリゲート名 イベント名
public 型 イベントが発生するメソッド名()
{
イベント名(this, 引数のリスト);
…
}
}
私たちはこの中で決められている。
ソース名
イベント名
デリゲート名
イベントハンドラの引数
にしたがってイベントハンドラを設計・登録することでイベント処理ができるようになるのです。
あるクラスが別の部分に処理を依頼するしくみを一般的にデリゲート()と呼ぶこともあります。C#のデリゲートは、この依頼のしくみを登録する役割を持っているのです。

コメント