循环遍历页面上的所有用户控件
要获得每个用户控制,你必须测试控制的类型:
编辑:我修改我的例子去通过递归的所有控件:
方法
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);
Nah。这不起作用 – 2010-04-13 19:00:00
什么不适用于它?如果(curControl是UserControl)从不为真,则为 – CAbbott 2010-04-13 19:02:29
。并且我在页面上有一个用户控件 – 2010-04-13 19:06:33
foreach(Control control: Page.Controls)
{
//do something with control object
}
但是,它通过所有控件循环。用户控件如何区分。的GetType()? – 2010-04-13 18:53:58
控件可以嵌套,因此您需要递归函数来遍历所有控件。 – 2010-04-13 18:55:27
这应该工作:
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;
}
我创建了一个扩展方法来做到这一点,这与LINQ真的很好的作品。
<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,你可以做这样的事情在页面上的所有复选框设置为未选中:
For Each myControl As CheckBox In pnlMain.DecendentControls.Where(Function(x) TypeOf x Is CheckBox)
myControl.Checked = False
Next
这是的WinForms,WPF或ASP.NET?我怀疑后者,但你永远不知道。 – ChrisF 2010-04-13 18:50:11
“用户控件”是指*托管控件*还是特定用户控件(.ascx)? – CAbbott 2010-04-13 18:51:06
@ChrisF:你猜对了! ASP.Net它是 @CAbbott:.ascx – 2010-04-13 18:51:36