フォーム内のコントロールを名前で探して取得する
スポンサーリンク
フォーム内のコントロールを名前で探して取得するには、Controls プロパティでコントロールを列挙し、その Name プロパティと合致しているか判断することで可能です。Controls プロパティで列挙されたコントロールの中にさらにコントロールが含まれる場合がありますので、再帰呼び出しが必要となります。
以下のように FindControl メソッドという静的なメソッドを書きます。このメソッドの第 1 引数は、親となるコントロールです。フォーム内を探したい場合は、そのフォームのインスタンスを指定します。フォームに限らず、GroupBox などのコントロールを指定することで、GroupBox 内のみを検索することが可能です。
ただ、私はこのような方法は好ましいと思いません。なぜならば、コンパイル解決できていないからです。コンパイル時にそのコントロールが存在していることを保証できません。本来は、参照そのものを別で管理しておくべきだと思います。
サンプルコード
以下にサンプルコードを示します。
C# 全般
/// --------------------------------------------------------------------------------------- /// <summary> /// 指定したコントロール内に含まれるコントロールを指定した名前で検索します。</summary> /// <param name="hParent"> /// 検索対象となる親コントロール。</param> /// <param name="stName"> /// 検索するコントロールの名前。</param> /// <returns> /// 取得したコントロールのインスタンス。取得できなかった場合は null。</returns> /// --------------------------------------------------------------------------------------- public static Control FindControl(Control hParent, string stName) { // hParent 内のすべてのコントロールを列挙する foreach (Control cControl in hParent.Controls) { // 列挙したコントロールにコントロールが含まれている場合は再帰呼び出しする if (cControl.HasChildren) { Control cFindControl = FindControl(cControl, stName); // 再帰呼び出し先でコントロールが見つかった場合はそのまま返す if (cFindControl != null) { return cFindControl; } } // コントロール名が合致した場合はそのコントロールのインスタンスを返す if (cControl.Name == stName) { return cControl; } } return null; }
使用例は以下のようになります。
C# 全般
// 現在のフォーム内から、textBox1 という名前のコントロールを探す Control cFindControl = FindControl(this, "textBox1"); // 見つかった場合は Text プロパティを表示する if (cFindControl != null) { MessageBox.Show(cFindControl.Text); }
関連するリファレンス
準備中です。