我们在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]);
                }
            }
        }

递归的妙用—遍历子控件相关推荐

  1. 记录下UIButton的图文妙用和子控件的优先显示

    UIButton的用处特别多,这里只记录下把按钮应用在图文显示的场景,和需要把图片作为按钮的背景图片显示场景: 另外记录下在父控件的子控件优先显示方法(控件置于最前面和置于最后面). 先上效果图: 1 ...

  2. C# WPF 之 遍历子控件

    /// <summary>/// 检查非空字段/// </summary>/// <param name="IsOk"></param&g ...

  3. [习题].FindControl()方法 与 PlaceHolder控件 #2(动态加入「子控件」的事件)

    这是我的文章备份,有空请到我的网站走走, http://www.dotblogs.com.tw/mis2000lab/ 才能掌握我提供的第一手信息,谢谢您. http://www.dotblogs.c ...

  4. 遍历界面控件 android,Android 判断所有字段是否已经输入的实例

    Android 遍历控件 Overview 在我们登录或者注册提交什么数据的时候我们需要填写我们的个人信息,所以我们需要判断我们的字段时候都输入了. Android 如何遍历我们界面中的控件 按照国际 ...

  5. C++ 主程序中打开子程序窗口隐藏,操作控件 遍历窗口控件句柄EnumChildWindows();获取其他程序进度条数据 操作选择框 按钮点击

    1.线程启动子程序  ShowWindow(hWnd, SW_SHOW)显示 ShowWindow(hwnd, SW_HIDE);隐藏 system_hide(L"Odin3.exe&quo ...

  6. WPF查找子控件和父控件方法

    原文:WPF查找子控件和父控件方法 public List<T> GetChildObjects<T>(DependencyObject obj, string name) w ...

  7. (0066)iOS开发之UITableViewCell上子控件通过superView找对应的cell的探究

    转载自:http://www.cnblogs.com/XYQ-208910/p/6663677.html 一.简单介绍 UITableViewCell是UITableView的核心部分,我们在开发中因 ...

  8. Swift4 - 动态计算UITableView中tableHeaderView的高度 - 获取子控件高度和宽度

    核心 : /// 获取 子控件高度func sizeHeaderToFit(view:UIView) {view.setNeedsLayout()view.layoutIfNeeded()let wi ...

  9. pyqt 子控件更新父控件ui

    可以用信号槽,好像专业点. 也可以直接用变量通信. 子控件更新父控件ui时,重新弹了一个窗口,父控件重新建了一个实例 仔细查原因 是子控件,父控件都有信号槽,相互连接,把关系搞串了,后来删掉一端的信号 ...

最新文章

  1. 列举窗体控制台应用程序中的3中控件_今天来点枯燥的,Visual C#的Windows窗体运行过程...
  2. 使用String()解决utf-8字符转GB2312的问题
  3. ICPC-无限路之城
  4. NHibernate for .NET 1.2
  5. 七、PHP框架Laravel学习笔记——资源控制器
  6. 基于jQuery实现自动或点击切换效果
  7. 机器学习线性回归_机器学习实例--线性回归
  8. mysql monitor用户_Mysql的用户基本操作
  9. jquery操作select选项
  10. 设计模式 ( 二 ) 简单工厂模式
  11. NitroShare —— 跨平台的局域网文件传输工具
  12. 计算机管理恢复分区,如何在Windows10中删除磁盘管理器中的恢复分区
  13. 小知识 定位测绘领域中全站仪/接收机RTK精度1cm+1ppm的含义
  14. deleteRow() 连续删除多行
  15. 2014 年最热门的国人开发开源软件 TOP 100 - 开源中国社区
  16. 微信小程序 | 一比一复刻抖音短视频
  17. java根据经纬度转地址或者根据地址转经纬度
  18. logback之三:输出日志到文件(滚动)
  19. minio Non-XML response from server
  20. springcloud ribbon实现负载均衡的时候,提示Request URI does not contain a valid hostname: htt...

热门文章

  1. 使用Python,OpenCV,面部标志进行面部对齐
  2. LabVIEW条形码识别(实战篇—5)
  3. OpenCV(十九)直方图(直方图计算、掩膜、均衡化、自适应均衡化)
  4. visual studio spy使用实现后台按键_多种精华液应该如何叠加使用?
  5. 【3】npm run build Vue的项目,如何修改相对路径配置
  6. CentOS 6.3 64bit上测试ATS 5.3.0中的正则刷新插件regex_revalidate
  7. Linux C中的basename函数用法示例
  8. 工厂方法模式和抽象工厂模式
  9. c#总结最近的几项重要代码
  10. spring boot jpa 整合