C# 開発

C# コントロールを配列のように使う (1)

準備

(なし)

デザイン

  • フォーム (Form1) にボタン (button1) を配置します。
  • フォーム (Form1) にボタン (button2) を配置します。
  • フォーム (Form1) にボタン (button3) を配置します。

サンプルコード (C#)

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            foreach (Button item in Controls)
            {
                item.Click += new EventHandler(Num);
            }
        }

        private void Num(object sender, EventArgs e)
        {
            switch (((Button)sender).Text)
            {
                case "button1":
                    ((Button)sender).Text = "A";
                    break;

                case "button2":
                    ((Button)sender).Text = "B";
                    break;

                case "button3":
                    ((Button)sender).Text = "C";
                    break;
            }
        }
    }
}

解説

依然の VB にはコントロール配列というものがあり、コントロールにインデックスを付けてインデックスにより、処理を分岐できていました。それと同様の機能を実現します。

まず、全てのコマンドボタンに同一のイベントハンドらを定義しています。各ボタンがクリックされると、ボタンに応じてボタンのテキストを変更しています。但し、ボタン名の変更を行うと、ソースも変更する必要があります。

C++/CLI はボタン名の文字列で switch 分岐できないため、ボタン名の最後に付与されている数値を取得して分岐処理しています。

結果

動作確認環境

Visual Studio 2022 Professional (.NET 7 C#11)

ログ

初版:2016.05.03 Visual Studio 2015 Professional (C# 6.0)

-C# 開発