zoukankan
html css js c++ java
递归的妙用—遍历子控件
我们在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]);
}
}
}
要是早想到用递归的方式,昨天我也就不用那么迟睡觉了。
以后在编程中一定要多考虑是否有更好的方法,不能只顾埋头写代码,要从多个角度考虑解决问题的方法。
查看全文
相关阅读:
PhpStrom之添加文件夹至左侧目录树
PhpStorm下载、破解
ASP.NET 页面执行顺序
委托的使用 举例猫叫,老鼠逃跑,主人惊醒
分页显示
WebForm页面生命周期及asp.net运行机制
json 对象和json字符串
说走就走??
面向多态
mvc 过滤器篇
原文地址:https://www.cnblogs.com/dudu/p/41655.html
最新文章
Go系列 string、bytes、rune的区别
select 语句for update作用
Golang 入门系列(十六)锁的使用场景主要涉及到哪些?读写锁为什么会比普通锁快
Golang的反射reflect深入理解和示例
Go Module 引入本地自定义包
底层原理
五种常见的 PHP 设计模式
Linux iptables防火墙实用模板
iptables四个表与五个链间的处理关系
iptables的基本语法格式
热门文章
掌握Linux运维核心知识的快速方法
CentOS常用查看系统、资源、服务、用户等命令
20个高效正则表达式
centos中iptables和firewall防火墙开启、关闭、查看状态、基本设置等
Linux中的8种查看命令
linux iptables防火墙使用模板
Linux运维工程师必学必备的8项技能
PhpStorm之服务器篇
PhpStorm之操作数据库
PhpStorm之配置数据库连接
Copyright © 2011-2022 走看看