我们在ASP.NET编程中, 经常需要遍历一个Web控件的子控件 ,找到所需的控件并获取控件中相应的值。以前我都是采用循环的方式遍历子控件,但当子控件是复杂的树形结构,比如:子控件也有子控件,子控件的子控件也有子控件。这时如果用循环的方式,就要用嵌套循环,而有时我们很难确定我们所要找的控件在子控件树的哪一层,昨天我就为些付出了代价,因为一个控件在内部增加了Panel控件,并将它的子控件移到了Panel控件上,我通过循环怎么也找不到所需的控件。
既然子控件表现为一个树形结构,为什么我不用递归去遍历子控件?当我看着不太优雅的嵌套循环代码时,我突然这样想到。使用递归,根本不用关心所需的控件在哪一层,而且代码简洁。
下面就是两种遍历方式:
1、循环方式:
for (int i =0; i<GlobalCategoryPanel.Controls.Count;i++)//GlobalCategoryPanel是个Panel控件
{
if(GlobalCategoryPanel.Controls[i] is AdvancedPanel)//AdvancedPanel是个自定义控件
{
AdvancedPanel ap=(AdvancedPanel)GlobalCategoryPanel.Controls[i];
for(int ap_i=0;ap_i<ap.Controls.Count;ap_i++)
{
if(ap.Controls[ap_i] is Panel)
{
Panel ap_panel=(Panel)ap.Controls[ap_i];
for(int ap_panel_i=0;ap_panel_i<ap_panel.Controls.Count;ap_panel_i++)
{
if(ap_panel.Controls[ap_panel_i] is RadioButtonList)
{
RadioButtonList rbl=(RadioButtonList)ap_panel.Controls[ap_panel_i];
al.Add(int.Parse(rbl.SelectedValue));
}
}
}
}
}
}
2、递归方式
private void Button1_Click(object sender, System.EventArgs e)
{
FindSelecedControl(GlobalCategoryPanel);
}
private void FindSelecedControl(Control control)//递归函数
{
if(control is RadioButtonList)
{
RadioButtonList rbl=(RadioButtonList)control;
al.Add(int.Parse(rbl.SelectedValue));
}
else
{
for(int i=0;i<control.Controls.Count;i++)
{
FindSelecedControl(control.Controls[i]);
}
}
}
分享到:
相关推荐
QT遍历窗体的控件的方法 QT遍历窗体的控件 QT遍历窗体 QT遍历控件 QT遍历所有控件 QT遍历窗体的控件的方法 QT遍历窗体的控件 QT遍历窗体 QT遍历控件 QT遍历所有控件
主要介绍了C#递归遍历窗体所有textbox控件并设置textbox事件的方法,包括针对textbox控件的递归遍历技巧与事件方法的设置技巧,需要的朋友可以参考下
/// C# 只遍历控件子控件,不遍历孙控件 ///当控件有子控件时,需要用递归的方法遍历,才能全部列出控件上的控件 /// /// 控件类型 /// 要遍历的控件 /// 控件名 /// <returns></returns> public static T Ge
C#遍历系统文件夹(TreeView控件),递归方式遍历 顺便使用树控件
利用递归算法Asp.net下实现遍历母版页中内容页的控件方法
vb.net资源:运用递归遍历其它程序窗口内所有控件的类名,控件的句柄,和控件的标题。所用函数有FindWindow、EnumChildWindows、GetClassName、GetWindowText、GetWindowTextLength
VB6.0通用遍历所选文件夹及其多重子文件夹操作,直接使用Command按钮过程可以操作,无需其他额外控件。新建一个窗体,添加一个Command1按钮,添加一个listbox控件,名称为list1,打开一个Excel空白文件(如不需要请...
1.先序遍历非递归算法#define maxsize 100typedef struct{ Bitree Elem[maxsize]; int top;}SqStack;void PreOrderUnrec(Bitree t){ SqStack s; StackInit(s); p=t; while (p!=null || !StackEmpty(s)) { while (p!=...
正好要用到这样的功能,在网上找了一下,类似的代码都不太合适,于是只好自己写了一个,代码拙劣,望不吝赐教^v^
QTreeView递归实现展开或者闭合某个节点下面的所有子节点 不是一键展开所有,是展开你要操作的节点下面的所有子节点!
VC递归遍历指定文件夹下的所有子文件夹与文件,并生成树结构的示例代码。
以先序递归建立二叉树,实现递归先序,中序,后续,非递归中序遍历序列输出,并用树控件显示二叉树结构
易语言API无递归遍历文件夹模块源码
数据结构树的部分!根据输入判断是否有子树,然后完成树的各种递归遍历和中序非递归遍历!用树控件将树显示出来,显示树的各种遍历结果,对初学者很有用!
主要介绍了C#实现根据指定容器和控件名字获得控件的方法,其中包括了遍历与递归的应用,需要的朋友可以参考下
通过FolderBrowserDialog组件指定搜索路径,使用DirectoryInfo类遍历指定文件目录,并使用FileSystemInfo类提供的属性和方法,递归检索所有的mdb文件。并将检索到的mdb文件的名称、路径、大小和创建日期显示在...
简单高效的文本阅读器, 用递归遍历文件夹文本,作为treeview控件的节点
建立二叉树并遍历的程序,可以实现现需输入二叉树,进行先序、中序、后序遍历,同时通过树控件输出二叉树。