2

私の WinForm には、Panel、SpliContainer、StatusStrip などのいくつかのコンテナーがあります。これらの各コンテナーには、ボタンやテキスト ボックスなどの基本的な要素が含まれています。コントロールを見つけるには、すべてのフォーム コントロール (Panels、SplitContainers、StatusStrip 内のものも含む) を反復処理する必要があります。再帰関数で試してみます

    ListAllControls(Control MainControl)
    {
        foreach (Control control in MainControl.Controls)
        {
            if (control.HasChildren)
            {
                ListAllControls(control);
            }
            else
            { 
                // do something with this control
            }
        }
    }

しかし、コンテナにあるコントロールを取得できません!?

アップデート:

SplitContainer、Panel、および StatusStrip を含む Form があります。これらの各コントロールには、StatuStrip1 の toolStripStatusLabel1 のようないくつかの子コントロールがあります。問題は、たとえば、関数 ListAllControls を介して StatuStrip のコントロール toolStripStatusLabel1 を見つけようとすると、見つからない!? フォームからすべてのコントロールを取得する別の方法はわかりません。完全なコードは次のとおりです。

class Control_Finder
{

    private Control founded_control = null;

    public Control Founded_Control
    {
        get { return founded_control; }
    }

    public void ListAllControls(Control MainControl, string SearchForControl)
    {
        foreach (Control control in MainControl.Controls)
        {
            if (control.HasChildren)
            {
                ListAllControls(control, SearchForControl);
            }
            else
            {
                // check if control has searched name
                if (control.Name == SearchForControl)
                {
                    founded_control = control;
                    return;
                }
            }
        }
    }
} // class

サンプル:

Form Me = this;
Control_Finder Test = new Control_Finder();
Test.ListAllControls(Me, "toolStripStatusLabel1");

if (Test.Founded_Control != null)
{
      MessageBox.Show("I found control " + Test.Founded_Control.Name + "!");
}
else
{
      MessageBox.Show("Didn't found! :(");
}

このサンプルでは、​​見つかりませんでした :(しかし、StatusStrip1 を使用すると、「コントロール StatusStrip1 が見つかりました!」 という質問が以前よりも明確になることを願っています。

4

1 に答える 1