|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Controls of a formHello
I have a form that containes a lot of controls including panels those contain other controls. Is there a way to simply get all contained controls either directly or indirectly through other containers such as panel or GroupBox controls? Hamed wrote:
> Hello Use a recursive function and start with the form:> > I have a form that containes a lot of controls including panels those > contain other controls. Is there a way to simply get all contained controls > either directly or indirectly through other containers such as panel or > GroupBox controls? private void button1_Click(object sender, EventArgs e) { enumerateControls(this.Controls); } private void enumerateControls(ControlCollection container) { foreach(Control c in container) { //Do something with control here //Now check this control to see if it has any controls of its own if (c.Controls.Count > 0) enumerateControls(c.Controls); } } Hope this helps and watch for typos Or for the C# impaired here's the same code in VB syntax
' Air code warning! Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click enumerateControls(Me.Controls) End Sub Private Sub enumerateControls(ByVal container As ControlCollection) Dim c As Control For Each c In container ' Do something with control here ' Now check this control to see if it has any controls of its own If c.Controls.Count > 0 Then enumerateControls(c.Controls) End If Next End Sub Thanks, Seth Rowe Chris Dunaway wrote: Show quoteHide quote > Hamed wrote: > > Hello > > > > I have a form that containes a lot of controls including panels those > > contain other controls. Is there a way to simply get all contained controls > > either directly or indirectly through other containers such as panel or > > GroupBox controls? > > Use a recursive function and start with the form: > > private void button1_Click(object sender, EventArgs e) > { > enumerateControls(this.Controls); > } > > private void enumerateControls(ControlCollection container) > { > foreach(Control c in container) > { > //Do something with control here > > //Now check this control to see if it has any controls of its own > if (c.Controls.Count > 0) > enumerateControls(c.Controls); > } > } > > Hope this helps and watch for typos Or for the C# impaired here's the same code in VB syntax
' Air code warning! Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click enumerateControls(Me.Controls) End Sub Private Sub enumerateControls(ByVal container As ControlCollection) Dim c As Control For Each c In container ' Do something with control here ' Now check this control to see if it has any controls of its own If c.Controls.Count > 0 Then enumerateControls(c.Controls) End If Next End Sub Thanks, Seth Rowe Chris Dunaway wrote: Show quoteHide quote > Hamed wrote: > > Hello > > > > I have a form that containes a lot of controls including panels those > > contain other controls. Is there a way to simply get all contained controls > > either directly or indirectly through other containers such as panel or > > GroupBox controls? > > Use a recursive function and start with the form: > > private void button1_Click(object sender, EventArgs e) > { > enumerateControls(this.Controls); > } > > private void enumerateControls(ControlCollection container) > { > foreach(Control c in container) > { > //Do something with control here > > //Now check this control to see if it has any controls of its own > if (c.Controls.Count > 0) > enumerateControls(c.Controls); > } > } > > Hope this helps and watch for typos Hi,
Please do not crosspost to so many groups, you have included both C# and VB ngs. Post to the group you think will have more in common with your problem and post to others if not answer is received. -- Show quoteHide quote-- Ignacio Machin, ignacio.machin AT dot.state.fl.us Florida Department Of Transportation "Hamed" <ha***@raymehr.com> wrote in message news:uwZpJY%232GHA.1068@TK2MSFTNGP05.phx.gbl... > Hello > > I have a form that containes a lot of controls including panels those > contain other controls. Is there a way to simply get all contained > controls either directly or indirectly through other containers such as > panel or GroupBox controls? > > > Hamed,
You need to traverse the control tree; each control has Controls property where you can find its children. There is no method that gives you all controls in a flat list. -- Show quoteHide quoteHTH Stoitcho Goutsev (100) "Hamed" <ha***@raymehr.com> wrote in message news:uwZpJY%232GHA.1068@TK2MSFTNGP05.phx.gbl... > Hello > > I have a form that containes a lot of controls including panels those > contain other controls. Is there a way to simply get all contained > controls either directly or indirectly through other containers such as > panel or GroupBox controls? > > > Here's an example in C# using an iterator. It'll return all controls in their
front to back order (z-order, not tab-order): public static IEnumerable<Control> GetAllControls(Control parent) { foreach (Control child in parent.Controls) { yield return child; foreach (Control grandChild in GetAllControls(child)) yield return grandChild; } } and you can use it like this: foreach (Control c in GetAllControls(form)) Trace.WriteLine(c.Name); Hope this helps. Regards Henrik Show quoteHide quote "Hamed" wrote: > Hello > > I have a form that containes a lot of controls including panels those > contain other controls. Is there a way to simply get all contained controls > either directly or indirectly through other containers such as panel or > GroupBox controls? > > > >
A Question on VB Classes
Forcing Checkbox to Return integer instead of boolean Excel automation different language windows Web.config issue Create a Folder - Newbie Question Sorting a DataTable in a DataSet TreeNode with BOLD font get truncated Reference to a non-shared member requires an object reference User TreeView |
|||||||||||||||||||||||