This message was discovered on ASPFriends.com 'aspngcontrolsvb' list.
Responses highlighted in red are from those people who are likely to be able to contribute good, authoratitive information to this discussion. They include Microsoft employees, MVP's and others who IMHO contribute well to these kinds of discussions.
| Frans, Stephen |
I'd like to loop thru all controls on a web form, but cannot find a collection that I can enumerate thru (kind of like the old classic ASP "for each x in Request.Forms" functionality).
Moreover, it would be nice to know the object type (TypeOf kind of functionality to determine "user control" versus "web control" versus "html control"). Once I knew the type of object, I could cast the object and issue method calls on that object appropriate for that object.
Could someone point me in the right direction?
TIA,
Steve Frans Impact Innovations Group
|
|
| |
| |
| Brian Bilbro (VIP) |
Page.Controls is a collection of all of the controls.
There are some GetType functions available and even reflection (probably = simipler than that though) to figure out the object type.
HTHs, Brian'
----- Original Message ----- From: "Frans, Stephen" <Click here to reveal e-mail address> Sent: 11/6/2001 8:38:00 PM
I'd like to loop thru all controls on a web form, but cannot find a collection that I can enumerate thru (kind of like the old classic ASP = "for each x in Request.Forms" functionality). =20 =20 Moreover, it would be nice to know the object type (TypeOf kind of functionality to determine "user control" versus "web control" versus = "html control"). Once I knew the type of object, I could cast the object and issue method calls on that object appropriate for that object. =20 Could someone point me in the right direction? =20 TIA, =20 Steve Frans Impact Innovations Group =20 =20
|
|
| |
|
| |
| Daryl Pietrocarlo |
This isn't pretty code (and it is C#). A lot of copy and paste as I needed it, but here is a function that will "rip" through any heiarchy of controls if you pass the Enumerator using some recursion to pound through the levels.
void ripper(IEnumerator indexEnumerator ) { while (indexEnumerator.MoveNext()) { Debug.WriteLine("Control:" + indexEnumerator.Current.ToString()); Debug.WriteLine("Type:" + indexEnumerator.Current.GetType().Name);
if ( indexEnumerator.Current.GetType().Name =3D=3D "Label")=20 { Label l =3D (Label)indexEnumerator.Current; Debug.WriteLine("-----------> Label Text:" + l.Text); } =09 if ( indexEnumerator.Current.GetType().Name =3D=3D "TextBox")=20 { TextBox l =3D (TextBox)indexEnumerator.Current; Debug.WriteLine("-----------> TextBox Text:" + l.Text); }
if ( indexEnumerator.Current.GetType().Name =3D=3D "DataBoundLiteralControl") =
{ DataBoundLiteralControl l =3D (DataBoundLiteralControl)indexEnumerator.Current; Debug.WriteLine("-----------> DataBoundLiteralControl Text:" + l.Text); }
if ( indexEnumerator.Current.GetType().Name =3D=3D "LiteralControl" || indexEnumerator.Current.GetType().Name=3D=3D = "ResourceBasedLiteralControl")=20 { LiteralControl l =3D (LiteralControl)indexEnumerator.Current; Debug.WriteLine("-----------> LiteralControl Text:" + l.Text); =09 } =09 =09 Debug.WriteLine("Assembly:" + indexEnumerator.Current.GetType().Assembly); Control c =3D (Control)indexEnumerator.Current;
if (c.Controls.GetEnumerator() !=3D null) { =09 ripper(c.Controls.GetEnumerator() ); } } }
Call it like this:
ripper(Page.Controls.GetEnumerator());
Remember if you have another control like a Datagrid, you can pass MyDataGrid.Controls.GetEnumerator() just to go through the datagrid etc.
Daryl Pietrocarlo Vibrant Solutions Click here to reveal e-mail address
-----Original Message----- From: Brian Bilbro [mailto:Click here to reveal e-mail address]=20 Sent: Wednesday, November 07, 2001 11:52 PM To: aspngcontrolsvb Subject: [aspngcontrolsvb] RE: Looping thru controls on a page
Page.Controls is a collection of all of the controls.
There are some GetType functions available and even reflection (probably simipler than that though) to figure out the object type.
HTHs, Brian'
----- Original Message ----- From: "Frans, Stephen" <Click here to reveal e-mail address> Sent: 11/6/2001 8:38:00 PM
I'd like to loop thru all controls on a web form, but cannot find a collection that I can enumerate thru (kind of like the old classic ASP "for each x in Request.Forms" functionality). =20 =20 Moreover, it would be nice to know the object type (TypeOf kind of functionality to determine "user control" versus "web control" versus "html control"). Once I knew the type of object, I could cast the object and issue method calls on that object appropriate for that object. =20 Could someone point me in the right direction? =20 TIA, =20 Steve Frans Impact Innovations Group =20 =20
| [aspngcontrolsvb] member Click here to reveal e-mail address =3D YOUR ID=20 | http://www.asplists.com/asplists/aspngcontrolsvb.asp =3D JOIN/QUIT=20 | http://www.asplists.com/search =3D SEARCH Archives
|
|
| |
|
| |
| Paul D. Murphy |
FWIW, if you turn on tracing ASP.NET will lay out the control hierarchy at the foot of every page.
Paul
[Original message clipped]
|
|
| |
|
| |
| Rob Waggoner (VIP) |
And a VB Example:
Public Class frmMain Inherits System.Windows.Forms.Form ...
Dim ctlToWork As Control ' declare control type
...
' loop through control collection searching for panel types For Each ctlToWork In Controls Select Case ctlToWork.GetType.FullName Case "System.Windows.Forms.Panel" ctlToWork.Visible = False End Select Next
Rob Waggoner Master Applications Craftsman WAGGS Web based Advanced Graphics and Graphing Solutions http://www.waggs.net "Applying Old world craftsmanship to New world technologies"
|
|
| |
|
|
|
|
|