如何获取页面上指定类型的控件的集合?

wjjdnajj 2011-04-16 11:04:12
我定义了一个类,但使用时总是出错。
#region 得到页面中所有指定类型的Control


/// <summary>
/// 使用完方法后可从这个对象得到返回的控件集合
/// </summary>
public ArrayList AlControls;
/// <summary>
/// 得到页面中所有指定类型的Control
/// </summary>
/// <param name="pagecontrols">使用形如this.Controls返回的对象</param>
public void ReturnControls(System.Web.UI.ControlCollection pagecontrols, string stringControlType )
{
if (!string.IsNullOrEmpty(stringControlType)&&pagecontrols.Count>0)
{
foreach(Control ct in pagecontrols)
{
if (ct.GetType().ToString() == stringControlType)
{
this.AlControls.Add(ct);
}
else
{

if (ct.Controls != null && ct.Controls.Count > 0)
{
ReturnControls(ct.Controls, stringControlType);
}

}
}
}
}
#endregion
...全文
602 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjjdnajj 2011-05-18
  • 打赏
  • 举报
回复
32你出现得有点晚,要不200分全是你的了
fk1984316 2011-05-14
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 ojlovecd 的回复:]
C# code

List<System.Web.UI.Control> GetControls(System.Web.UI.ControlCollection ctrls, Type t)
{
List<System.Web.UI.Control> list = new List<System.Web.UI.Control>();
……
[/Quote]
up
dalmeeme 2011-05-14
  • 打赏
  • 举报
回复
使用方法,获取页面上的所有TextBox,返回一个Control类型的数组:
GetControls(this.Page,"TextBox");
获取div1下面的所有Button,返回一个Control类型的数组:
GetControls(div1,"Button");
dalmeeme 2011-05-14
  • 打赏
  • 举报
回复
			/// <summary>
///得到给定的控件下的所有某种类型的子控件。
/// </summary>
/// <param name="c">给定的控件。</param>
/// <param name="controlName">要获取的子控件类型名称。</param>
/// <returns>找到的所有子控件。</returns>
public static Control[] GetControls(Control c, string controlName)
{
List<Control> controls = new List<Control>();
BuildControls(c, controlName, controls);
Control[] controlArray = controls.ToArray();
return controlArray;
}

/// <summary>
/// 构建GetControls方法中创建的controls泛型集合,为其添加元素。
/// </summary>
/// <param name="c">给定的控件。</param>
/// <param name="controlName">要获取的子控件类型名称</param>
/// <param name="controls">GetControls方法中创建的controls泛型集合的一个引用。</param>
private static void BuildControls(Control c, string controlName, List<Control> controls)
{
for (int i = 0; i < c.Controls.Count; i++)
{
if (c.Controls[i].GetType().Name == controlName)
controls.Add(c.Controls[i]);
if (c.Controls[i].HasControls())
BuildControls(c.Controls[i], controlName, controls);
}
}
insus 2011-05-14
  • 打赏
  • 举报
回复
参考这个看看是怎样取得页面的Hyperlink,然后动态改变它的url值的:
http://www.cnblogs.com/insus/articles/2033414.html
hl362496158 2011-05-14
  • 打赏
  • 举报
回复
id 不一样Type一样的啊
我姓区不姓区 2011-05-14
  • 打赏
  • 举报
回复
不好意思,代码确实有点问题,修改如下:

List<System.Web.UI.Control> GetControls(System.Web.UI.ControlCollection ctrls, Type t)
{
List<System.Web.UI.Control> list = new List<System.Web.UI.Control>();
foreach (System.Web.UI.Control ctrl in ctrls)
{
if (ctrl.GetType() == t)
list.Add(ctrl);
if (ctrl.Controls.Count > 0)
list.AddRange(GetControls(ctrl.Controls, t));
}
return list;
}

子夜__ 2011-05-14
  • 打赏
  • 举报
回复

一个月了。。。。太执着了。。。
我姓区不姓区 2011-05-14
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 wjjdnajj 的回复:]

我已经放置了5个textbox
[/Quote]
你看看你的TextBox是放置到哪里了,如果是直接放到form里,那应该是:
List<System.Web.UI.Control> list = GetControls(this.Page.Form.Controls, typeof(TextBox));
不过话说,从发帖到现在已经过了快一个月了,看来你对这个问题也不是很重视嘛
wjjdnajj 2011-05-14
  • 打赏
  • 举报
回复
我已经放置了5个textbox
wjjdnajj 2011-05-14
  • 打赏
  • 举报
回复
List<System.Web.UI.Control> GetControls(System.Web.UI.ControlCollection ctrls, Type t)
{
List<System.Web.UI.Control> list = new List<System.Web.UI.Control>();
foreach (System.Web.UI.Control ctrl in ctrls)
{
if (ctrl.GetType() == t)
{
list.Add(ctrl);
}
if (ctrl.Controls.Count > 0)
{
foreach (System.Web.UI.Control c in ctrl.Controls)
{
list.AddRange(GetControls(c.Controls, t));
}
}
}
return list;
}

protected void Button1_Click(object sender, EventArgs e)
{
List<System.Web.UI.Control> list = GetControls(this.Page.Controls, TextBox1.GetType());
}

楼上的,我按上面的调用了,跟踪list,发现始终为0。也就是无效。
我姓区不姓区 2011-05-06
  • 打赏
  • 举报
回复

List<System.Web.UI.Control> GetControls(System.Web.UI.ControlCollection ctrls, Type t)
{
List<System.Web.UI.Control> list = new List<System.Web.UI.Control>();
foreach (System.Web.UI.Control ctrl in ctrls)
{
if (ctrl.GetType() == t)
{
list.Add(ctrl);
}
if (ctrl.Controls.Count > 0)
{
foreach (System.Web.UI.Control c in ctrl.Controls)
{
list.AddRange(GetControls(c.Controls, t));
}
}
}
return list;
}

我姓区不姓区 2011-05-06
  • 打赏
  • 举报
回复
为什么要以字符串做为参数?这样你在传参的时候还要保证字符串正确,为什么不用Type作参数?
wjjdnajj 2011-05-06
  • 打赏
  • 举报
回复
我都加到200分了
wjjdnajj 2011-05-06
  • 打赏
  • 举报
回复
15楼,不是说给个例子么?
wjjdnajj 2011-05-03
  • 打赏
  • 举报
回复
好象要用到反射,这个我不太了解,15楼谢谢了
子夜__ 2011-05-02
  • 打赏
  • 举报
回复
遍历页面控件 取type.
wjjdnajj 2011-05-02
  • 打赏
  • 举报
回复
100分……虽然很多,不过可以。
chen_ya_ping 2011-04-24
  • 打赏
  • 举报
回复
比如text1 text2 text 3...................
for(int i=0 ;i<4 i++)
{
this.form1.findcontrol("text"+i.tostring()).enabled=false;
}
dalmeeme 2011-04-24
  • 打赏
  • 举报
回复
我写了一个,如果你能够给100分的话,我就给你。

得到给定的控件下的所有某种类型的子控件。
public static Control[] GetControls(Control c, string controlName)
加载更多回复(14)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧