In C # (da Sie es als solches markiert haben) können Sie einen LINQ-Ausdruck wie folgt verwenden:
List<Control> c = Controls.OfType<TextBox>().Cast<Control>().ToList();
Zur Rekursion bearbeiten:
In diesem Beispiel erstellen Sie zuerst die Liste der Steuerelemente und rufen dann eine Methode zum Auffüllen auf. Da die Methode rekursiv ist, gibt sie die Liste nicht zurück, sondern aktualisiert sie nur.
List<Control> ControlList = new List<Control>();
private void GetAllControls(Control container)
{
foreach (Control c in container.Controls)
{
GetAllControls(c);
if (c is TextBox) ControlList.Add(c);
}
}
Es kann möglich sein, dies in einer LINQ-Anweisung mit der Descendants
Funktion zu tun , obwohl ich damit nicht so vertraut bin. Weitere Informationen hierzu finden Sie auf dieser Seite .
Bearbeiten Sie 2, um eine Sammlung zurückzugeben:
Wie @ProfK vorgeschlagen hat, ist eine Methode, die einfach die gewünschten Steuerelemente zurückgibt, wahrscheinlich eine bessere Vorgehensweise. Um dies zu veranschaulichen, habe ich den Code wie folgt geändert:
private IEnumerable<Control> GetAllTextBoxControls(Control container)
{
List<Control> controlList = new List<Control>();
foreach (Control c in container.Controls)
{
controlList.AddRange(GetAllTextBoxControls(c));
if (c is TextBox)
controlList.Add(c);
}
return controlList;
}