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 プログラムが理解しやすくなります。


訪問数 5 回, 今日の訪問数 5回

記事下広告

C#,イベント

Posted by hidepon