投稿者 魔界の仮面弁士  (社会人) 投稿日時 2023/12/22 15:15:49
質問の意図としては「sender の使用例を知りたい」ということでよろしいでしょうか。
では実験的に、【三目並べ】ゲームの雛形を作ってみましょう。

Windows Forms において、フォームに TableLayoutPanel を貼り、
TableLayoutPanel1 のプロパティを
 ・ RowCount = 3
 ・ ColumnCount = 3
 ・ CellBorderStyle = OutsetDouble
に設定します。

3 行 3 列のマス目ができるので、それぞれのセルに Label を貼っていきます。

そしてデザイン時に、Ctrl/Shift のいずれかを押しながら、それらのラベルを順にクリックして、
9 つのラベルだけが選択された状態にしたうえで、それらすべてに対して
 ・Anchor プロパティを Top, Bottom, Left, Right に変更
 ・TextAlign プロパティを MiddleCenter に変更
 ・Text プロパティを、" " (全角空白) にしておく
と設定していきます。

さらに、9 つのラベルすべてが選択された状態でプロパティの⚡アイコンを押して
イベント一覧に切り替え、Click イベントの欄に「labels_Click」と記述します。

そうすると、”private void labels_Click(object sender, EventArgs e)” が生成され、
その一つのイベントハンドラに対して、9 つの Label が割り当てられた状態になります。

イベント引数 sender に、クリックされたラベルが渡されるので、
イベントハンドラを 9 つ用意せずとも、一つのイベントハンドラを共通利用できるわけです。

// 現在のターン数
private int turnCount = 0;

// クリックするごとに、○と×を交互に配置していく
private void labels_Click(object sender, EventArgs e)
{
    // ★ sender はクリックされた Label を表している ★ 
    var lbl = (Label)sender;

    // ○×がセット済みなら抜ける
    if (lbl.Text == "×" || lbl.Text == "○") { return; }

    // ターン数を増やす
    turnCount++;

    // 先手なら○、後手なら×を表示 
    lbl.Text = "×○"[turnCount % 2].ToString();

    // 何行目何列目のボタンが押されたのかを
    // 確認するため、タイトルバーにセル番号を記述
    var pos = tableLayoutPanel1.GetCellPosition(lbl);
    this.Text = "Click:" + pos.Column + ", " + pos.Row;

    // 余力があれば、ここに三目並べの勝敗判定を記述していく
    /*
    ** ・縦横斜めのいずれかが揃っていれば、勝敗表示をしてゲーム終了処理
    ** ・揃っていなくて turnCount が 9 に達していれば、引き分け処理
    ** ・揃っていなくて turnCount が 9 未満なら、何もせずそのままゲーム継続
    */
}