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
}
|