0

私が作成しているプログラムには、多くのユーザー入力が必要です。ユーザーがコマンドを選択すると、対応するグループボックスが表示され、現在のグループボックスを後で使用できるように保存します。グループボックスが GUI で重複していない場合、以下のコードは問題なく動作します。私が望むのは、すべてのグループボックスを互いに積み重ねることができ、これが引き続き機能することです。

for (int i = 0; i < funcCodes.Length; i++)
  {
    byte z = funcCodes[i];
    GroupBox gb = (GroupBox)Controls["gbDisplay_FC" + z];
    if (z == zcontrol.getFunctionCode())
    {
        gb.Visible = true;
        currentGB = gb;
    }
    else
        gb.Visible = false;
  }

私が得た失敗は、それらが積み重ねられたときです gb がnullになります(グループボックスが見つかりません)

Edit1: 以下のコメントは、プロパティとドラッグ アンド ドロップを使用してグループボックスの場所を変更し、それを子にする場合と同様に機能します。

4

2 に答える 2

1

コントロール名を検索してから、次のように Controls.Find() を使用します。

        Control[] gbs = this.Controls.Find("gbDisplay_FC" + z.ToString(), true);
        if (gbs.Length > 0 && gbs[0] is GroupBox)
        {
            GroupBox gb = (GroupBox)gbs[0];
            // .. do something with "gb" ...
        }

これは、GroupBox がフォームに直接含まれている場合でも、「スタック」されて互いに含まれている場合でも機能します。

于 2013-10-25T16:50:20.033 に答える