LoginSignup
0
1

More than 1 year has passed since last update.

[C#]配下のコントロールを全て取得する[WindowsForms]

Posted at

検証環境
Windows11
.NET Framework 4.8

配下の子孫コントロールも含めて、持っている全てのコントロールを取得するプロパティはないようです。(あれ~なかったっけ)

ControlクラスはControlsプロパティを持っています。これで子のコントロールを全て取得できます。
が、それより下の孫以降のコントロールは取得できません。
仕方ないので、再帰的に取得してくる必要があります。

// 配下のコントロールを全て取得する
private List<Control> GetAllControls(Control parentControl)
{
    var list = new List<Control>();
    foreach (Control ctrl in parentControl.Controls)
    {
        list.Add(ctrl);

        // 配下のコントロールを追加
        list.AddRange(GetAllControls(ctrl));
    }

    return list;
}

↑AddRangeメソッドでは追加するリストが0件の場合でも、エラーになったり空白のリストが追加されることはありません。

以下は呼び出し例です。

// 呼び出し例
List<Control> editctrl = GetEditControls(this);

Linqとかでもっとかっこいい書き方ができそうですが、これでも取れます。。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1