Windows Formsで「ボタンが押されたら処理が動く」仕組み
Windows Forms でプログラムを書くと、よく出てくるのが次のようなコードです。
myButton.Click += HelloButtonClieked;
そしてその下には
private void HelloButtonClieked(object sender, EventArgs e)
{
helloLabel.Text = "Hello, World!";
}
というメソッドがあります。
ここで多くの人が疑問に思います。
「なぜボタンを押すと、このメソッドが呼ばれるのか?」
今回はこの仕組みを整理してみましょう。
まずは全体コード
次のコードは Windows Forms のシンプルな例です。
using System;
using System.Windows.Forms;
namespace HelloWorld
{
// Formクラスを継承した画面クラス
public partial class Form1 : Form
{
// Form1が作られたときに実行される
public Form1()
{
InitializeComponent();
// MyButtonクラスからボタンを作成
MyButton myButton = new MyButton();
// フォームに配置
myButton.Parent = this;
// ボタンの表示文字
myButton.Text = "私のボタン";
// 独自プロパティ
myButton.Category = "カテゴリがつかえたよ!!";
// Clickイベントにメソッドを登録
myButton.Click += HelloButtonClieked;
}
// ボタンが押されたときに呼ばれるメソッド
private void HelloButtonClieked(object sender, EventArgs e)
{
helloLabel.Text = "Hello, World!";
}
}
}
ここで重要なのは次の1行です。
myButton.Click += HelloButtonClieked;
イベントとは何か
Windows Forms は イベント駆動プログラムです。
つまり、
「何かが起きたら処理を実行する」
という構造になっています。
例えば次のような出来事があります。
| 出来事 | イベント |
|---|---|
| ボタンを押す | Click |
| キーを押す | KeyDown |
| フォームを開く | Load |
つまりボタンには
Clickというイベント
が用意されています。
イベントとメソッドの結び付け
次のコードを見てください。
myButton.Click += HelloButtonClieked;
これは次の意味です。
Clickイベントが発生したら
HelloButtonCliekedメソッドを呼ぶ
図にするとこうなります。
ボタンを押す
↓
Clickイベント発生
↓
HelloButtonClieked()
つまり
イベントにメソッドを登録している
という仕組みです。
HelloButtonCliekedメソッド
次のメソッドが実際に呼ばれます。
private void HelloButtonClieked(object sender, EventArgs e)
{
helloLabel.Text = "Hello, World!";
}
ここではラベルの文字を変更しています。
helloLabel.Text = "Hello, World!";
つまりボタンを押すと
Hello, World!
という文字が画面に表示されるわけです。
sender と EventArgs
メソッドの引数も少し見てみましょう。
(object sender, EventArgs e)
これはイベント処理の標準的な形です。
sender
イベントを発生させたオブジェクト
今回なら
押されたボタン
です。
EventArgs
イベントの追加情報です。
Clickイベントでは特に情報はないので
基本的に使いません。
このコードのもう一つのポイント
今回のコードには次のクラスが出てきます。
MyButton
これは普通の Button ではなく
Button
↓
MyButton
という 継承されたクラスです。
つまり
Buttonの機能
- Text
- Click
- Size
- Location
などはそのまま使えます。
さらに
Category
という 新しいプロパティも追加できます。
まとめ
Windows Forms では
イベントとメソッドを結び付けて処理を書く
という構造になっています。
今回のコードの流れはこうです。
ボタンを押す
↓
Clickイベント発生
↓
HelloButtonCliekedが呼ばれる
↓
ラベルの文字が変わる
この仕組みを理解すると、
- ボタン処理
- キー入力処理
- マウス操作
などの GUI プログラムが理解しやすくなります。





ディスカッション
コメント一覧
まだ、コメントがありません