J#(Java)フォーム内のコントロールを名前で探して取得する

スポンサーリンク

フォーム内のコントロールを名前で探して取得するには、Controls プロパティでコントロールを列挙し、その Name プロパティと合致しているか判断することで可能です。Controls プロパティで列挙されたコントロールの中にさらにコントロールが含まれる場合がありますので、再帰呼び出しが必要となります。

以下のように FindControl メソッドという静的なメソッドを書きます。このメソッドの第 1 引数は、親となるコントロールです。フォーム内を探したい場合は、そのフォームのインスタンスを指定します。フォームに限らず、GroupBox などのコントロールを指定することで、GroupBox 内のみを検索することが可能です。

ただ、私はこのような方法は好ましいと思いません。なぜならば、コンパイル解決できていないからです。コンパイル時にそのコントロールが存在していることを保証できません。本来は、参照そのものを別で管理しておくべきだと思います。

サンプルコード

以下にサンプルコードを示します。

J# 全般
/************************************************************************************
 *      指定したコントロール内に含まれるコントロールを指定した名前で検索します。
 *
 * @param   hParent 検索対象となる親コントロール。
 * @param   stName  検索するコントロールの名前。
 * @return          取得したコントロールのインスタンス。取得できなかった場合は null。
 ************************************************************************************/
public static final Control FindControl(final Control hParent, final String stName) {
    // hParent 内のすべてのコントロールを取得する
    final Control.ControlCollection cControlCollection = hParent.get_Controls();

    // コントロールが存在しないのであれば null を返す
    if (cControlCollection == null) {
        return null;
    }

    // hParent 内のすべてのコントロールを列挙する
    for (int i = 0; i <= cControlCollection.get_Count() - 1; i++) {
        final Control cControl = cControlCollection.get_Item(i);

        // 列挙したコントロールにコントロールが含まれている場合は再帰呼び出しする
        if (cControl.get_HasChildren()) {
            final Control cFindControl = FindControl(cControl, stName);

            // 再帰呼び出し先でコントロールが見つかった場合はそのまま返す
            if (cFindControl != null) {
                return cFindControl;
            }
        }

        // コントロール名が合致した場合はそのコントロールのインスタンスを返す
        if (cControl.get_Name() == stName) {
            return cControl;
        }
    }

    return null;
}

使用例は以下のようになります。

J# 全般
    // 現在のフォーム内から、textBox1 という名前のコントロールを探す
    Control cFindControl = FindControl(this, "textBox1");

    // 見つかった場合は Text プロパティを表示する
    if (cFindControl != null) {
        MessageBox.Show(cFindControl.get_Text());
    }

関連するリファレンス

準備中です。

スポンサーリンク