たるきちのあれこれ









  Topプログラミングサンプル ▶ コントロール配列の作成

コントロール配列を作成するサンプルです。

フォーム(Form1)内に複数のボタンコントロール(「Button1」「Button2」…)を配置しておきます。

C#

public static object FindControlByFieldName(Form frm, string name)
{
    Type t = frm.GetType();
    System.Reflection.FieldInfo fi = t.GetField(name, System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly);
    if (fi == null) return null;
    return fi.GetValue(frm);
}
public object GetControlArrayByName(Form frm, string name)
{
    System.Collections.ArrayList ctrls = new System.Collections.ArrayList();
    object obj;
    for (int i = 1; (obj = FindControlByFieldName(frm, name + i.ToString())) != null; i++) ctrls.Add(obj);
    if (ctrls.Count == 0)
    {
        return null;
    }
    else
    {
        return ctrls.ToArray(ctrls[0].GetType());
    }
}


Button[] buttonArray;

private void Form1_Load(object sender, EventArgs e)
{
    // ボタンコントロール配列を作成
    buttonArray = (Button[])GetControlArrayByName(this, "Button");
    // ボタンクリックイベント(Button_Click)の作成
    foreach (Button btn in buttonArray) btn.Click += new EventHandler(Button_Click);
}

private void Button_Click(object sender, EventArgs e)
{
    // クリックしたボタンのインデックス番号取得
    int index = 0;
    for (int i = 0; i < buttonArray.Length; i++)
    {
        if (buttonArray[i].Equals(sender)) index = i + 1;
    }

    // 「Button1」クリック時 : index = 1
    // 「Button2」クリック時 : index = 2
}