フォーム上のタイプ x のすべてのコントロールを取得する必要があります。以前、次のようなコードを見たことがあると思います。
dim ctrls() as Control
ctrls = Me.Controls(GetType(TextBox))
再帰関数を使用してすべてのコントロールを反復処理し、子を取得できることはわかっていますが、次のような、より簡単でわかりやすい方法はありますか?
Dim Ctrls = From ctrl In Me.Controls Where ctrl.GetType Is Textbox
ベストアンサー1
もう一つのオプションがあります。サンプル アプリケーションを作成してテストし、最初の GroupBox 内に GroupBox と GroupBox を配置しました。ネストされた GroupBox 内に 3 つの TextBox コントロールとボタンを配置しました。これは私が使用したコードです (探していた再帰も含まれています)
public IEnumerable<Control> GetAll(Control control,Type type)
{
var controls = control.Controls.Cast<Control>();
return controls.SelectMany(ctrl => GetAll(ctrl,type))
.Concat(controls)
.Where(c => c.GetType() == type);
}
フォームのロードイベントでテストするために、最初のGroupBox内のすべてのコントロールの数を知りたいと思いました。
private void Form1_Load(object sender, EventArgs e)
{
var c = GetAll(this,typeof(TextBox));
MessageBox.Show("Total Controls: " + c.Count());
}
そして、毎回適切なカウントが返されたので、これはあなたが探しているものに完璧に機能すると思います :)