2010-04-13 13 views
5

पृष्ठ पर मौजूद सभी उपयोगकर्ता नियंत्रणों के माध्यम से लूप करना चाहते हैं और उनकी आईडी प्राप्त करना चाहते हैं। मैं यह कैसे करुं?पृष्ठ पर सभी उपयोगकर्ता नियंत्रणों के माध्यम से लूप

+0

इस WinForms, WPF या ASP.NET है:

<Extension()> Public Function DecendentControls(ParentControl As Control) As Control() Dim controls As New List(Of Control) For Each myControl As Control In ParentControl.Controls controls.Add(myControl) controls.AddRange(myControl.DecendentControls) Next Return controls.ToArray End Function 

फिर LINQ के साथ अनियंत्रित करने के लिए एक पृष्ठ पर सभी चेक बॉक्स सेट करने के लिए कुछ इस तरह कर सकते हैं? मुझे बाद वाले पर संदेह है, लेकिन आप कभी नहीं जानते। – ChrisF

+0

"उपयोगकर्ता नियंत्रण" से आपका मतलब है * प्रबंधित नियंत्रण * या विशेष रूप से उपयोगकर्ता नियंत्रण (.ascx)? – CAbbott

+0

@ChrisF: आपको लगता है कि यह सही है! एएसपी.Net यह @CAbbott है: .ascx –

उत्तर

11

प्रत्येक उपयोगकर्ता नियंत्रण पाने के लिए आपको नियंत्रण के प्रकार का परीक्षण होगा:

संपादित करें: मैं अपने उदाहरण संशोधित रिकर्सिवली सभी नियंत्रण के माध्यम से जाना:

विधि

public void GetUserControls(ControlCollection controls) 
{ 
    foreach (Control ctl in controls) 
    { 
     if (ctl is UserControl) 
     { 
      // Do whatever. 
     } 

     if (ctl.Controls.Count > 0) 
      GetUserControls(ctl.Controls); 
    } 
} 

कहा जाता है

GetUserControls(Page.Controls); 
+0

नहीं। यह –

+1

काम नहीं करता है इसके बारे में क्या काम नहीं करता है? – CAbbott

+0

अगर (curControl UserControl है) कभी सच नहीं है। और मेरे पास पृष्ठ –

2
foreach(Control control: Page.Controls) 
{ 

    //do something with control object 

} 
+0

लेकिन फिर, यह सभी नियंत्रणों के माध्यम से loops। उपयोगकर्ता नियंत्रण को अलग कैसे किया जा सकता है। GetType() ?? –

+1

नियंत्रण घोंसला जा सकता है ताकि आपको सभी नियंत्रणों के माध्यम से लूप के लिए एक पुनरावर्ती कार्य की आवश्यकता हो। –

3

यह काम करना चाहिए:

var listOfUserControls = GetUserControls(Page); 

... 

public List<UserControl> GetUserControls(Control ctrl) 
{ 
    var uCtrls = new List<UserControl>(); 
    foreach (Control child in ctrl.Controls) { 
    if (child is UserControl) uCtrls.Add((UserControl)child); 
    uCtrls.AddRange(GetUserControls(child); 
    } 

    return uCtrls; 
} 
2

मैं जो LINQ के साथ वास्तव में अच्छी तरह से काम करता है यह करने के लिए एक विस्तार विधि, बनाया।

For Each myControl As CheckBox In pnlMain.DecendentControls.Where(Function(x) TypeOf x Is CheckBox) 
    myControl.Checked = False 
Next 
संबंधित मुद्दे