【C#】Delegate / Event ~ 基本編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2010/12/12/164101
https://dk521123.hatenablog.com/entry/2010/12/25/221009

の続き。

目次

【1】イベントを登録する
【2】イベントが発生したオブジェクトを判別する

 

【1】イベントを登録する

// 初期化処理(コンストラクタ内)
public Form1()
{
    InitializeComponent();
    
    // 追加(初期化処理)↓
    // ★ここ重要★ グループボックス内にあるコントロールを1つずつ指定
    foreach (var item in this.groupBox1.Controls)
    {
        CheckBox check = item as CheckBox; // CheckBox型として変換
        // ★ここ重要★ チェックドチェンジイベントの時に「checkBox_CheckedChanged」メソッドを呼ぶように指定
        check.CheckedChanged += new EventHandler(checkBox_CheckedChanged);
    }
    // 追加(初期化処理)↑
}

 イベント後の処理

 * 初期化時に、チェックドチェンジイベントの時に「checkBox_CheckedChanged」メソッドを
   呼ぶように指定しているので、その後の処理を以下に記述している

サンプル

#region チェックボックスのチェンジイベント
/// <summary>
/// チェックボックスのチェンジイベント
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void checkBox_CheckedChanged(object sender, EventArgs e)
{
    CheckBox target = sender as CheckBox;

    if (target.Checked)
    {
        target.BackColor = SystemColors.Highlight; // チェックボックスがクリックされたら、バックカラーをHighlightに変える
        foreach (var item in this.groupBox1.Controls)
        {
            CheckBox check = item as CheckBox;

            if (check != target)
            {
                check.Checked = false; // クリックされた以外のチェックボックスはチェックを外す
                check.BackColor = SystemColors.Window; // クリックされた以外のチェックボックスはデフォルト表示
            }
        }
    }
else
    {
         target.BackColor = SystemColors.Window;
    }
}
#endregion

 参考資料
http://yas-hummingbird.blogspot.com/2008/12/c.html
http://yas-hummingbird.blogspot.com/2008/12/c_12.html

 【2】イベントが発生したオブジェクトを判別する

 * イベントハンドラの引数「sender」を as演算子を使って、キャストする

サンプル

private void button1_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
}

 参考資料
http://blog.goo.ne.jp/shimono_tetsuo/e/209b10a56d603b4de6c3cf8f77ff2561
http://noudikara.jugem.jp/?eid=16

 ■ 補足:イベントの引数について

 System.EventArgs クラス

 * イベントに関する情報を保持

 参考資料
http://www.yo.rim.or.jp/~nag/cgi-bin/wiki.cgi?p=Visual+Studio.NET

 関連記事

Delegate / Event ~ 入門編 / Delegate
https://dk521123.hatenablog.com/entry/2010/12/12/164101
Delegate / Event ~ 入門編 / Event ~
https://dk521123.hatenablog.com/entry/2010/12/25/221009