C # 'da (bu şekilde etiketlediğinizden beri) aşağıdaki gibi bir LINQ ifadesi kullanabilirsiniz:
List<Control> c = Controls.OfType<TextBox>().Cast<Control>().ToList();
Özyineleme için düzenle:
Bu örnekte, önce denetim listesini oluşturursunuz ve ardından onu doldurmak için bir yöntem çağırırsınız. Yöntem özyinelemeli olduğu için listeyi döndürmez, sadece günceller.
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);
}
}
Descendants
Ben o kadar aşina olmasam da, bunu işlevi kullanarak bir LINQ deyiminde yapmak mümkün olabilir . Bununla ilgili daha fazla bilgi için bu sayfaya bakın .
Bir koleksiyon iade etmek için 2'yi düzenleyin:
@ ProfK'nın önerdiği gibi, istenen kontrolleri basitçe döndüren bir yöntem muhtemelen daha iyi bir uygulamadır. Bunu açıklamak için kodu aşağıdaki gibi değiştirdim:
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;
}