検証環境
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とかでもっとかっこいい書き方ができそうですが、これでも取れます。。