C # में (चूंकि आपने इसे इस प्रकार टैग किया है) आप इस तरह एक LINQ अभिव्यक्ति का उपयोग कर सकते हैं:
List<Control> c = Controls.OfType<TextBox>().Cast<Control>().ToList();
पुनरावर्तन के लिए संपादित करें:
इस उदाहरण में, आप पहले नियंत्रणों की सूची बनाते हैं और फिर उसे आबाद करने के लिए एक विधि कहते हैं। चूंकि विधि पुनरावर्ती है, यह सूची वापस नहीं करता है, यह सिर्फ इसे अपडेट करता है।
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);
}
}
ऐसा करने के लिए एक LINQ कथन में ऐसा करना संभव हो सकता है Descendants
फ़ंक्शन , हालांकि मैं इससे परिचित नहीं हूं। इस बारे में अधिक जानकारी के लिए इस पृष्ठ को देखें ।
संग्रह वापस करने के लिए 2 संपादित करें:
जैसा कि @ProfK ने सुझाव दिया, एक विधि जो केवल वांछित नियंत्रण लौटाती है वह शायद बेहतर अभ्यास है। इसका वर्णन करने के लिए मैंने कोड को इस प्रकार संशोधित किया है:
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;
}