我们在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]);
}
}
}
分享到:
相关推荐
- 在遍历控件时,应尽量使用`qobject_cast`来进行类型安全的转换,避免因为类型不匹配而导致的运行时错误。 - 遍历控件时,应当注意对空指针的检查,防止程序因访问空指针而崩溃。 - 对于递归遍历,需要注意递归深度...
5. **递归遍历**:对于容器控件(如Panel或GroupBox),需要再次调用`FindWindowEx`来继续遍历其子控件,确保所有子控件都被处理。 这个压缩包中的源码是一个很好的学习案例,它展示了如何使用Windows API来操作和...
总结来说,使用递归遍历C#中的MenuStrip菜单是一种有效且直观的方式,尤其适合处理具有嵌套结构的数据。通过定义递归函数并处理每个菜单项及其子项,你可以轻松地实现各种功能,如打印菜单结构、触发操作或进行菜单...
首先,我们看到一个名为`IterateThroughChildren`的方法,这个方法是递归遍历控件的核心。它接受一个`Control`类型的参数`parent`,代表当前正在处理的控件。通过`foreach`循环,我们可以访问到`parent`控件的所有子...
- 函数中使用了递归调用来遍历所有子窗口,需要注意递归深度,以免栈溢出。 #### 总结 通过上述介绍,我们了解了如何编写一个遍历子窗口的函数来获取指定类型的控件句柄。这种方法在Windows编程中非常实用,可以...
这个函数会调用EnumWindows,然后递归地使用GetWindow遍历子窗口,并调用GetWindowText和GetClassName获取每个窗口的详细信息,最后将这些信息显示在VB的窗体上。 总的来说,这个项目展示了如何利用VB和API函数深入...
3. **遍历子节点**:获取到一个节点后,我们可以使用`GetChildItem()`获取它的第一个子节点,然后使用`GetNextSiblingItem()`获取同级的下一个节点。这个过程可以递归执行,直到没有更多的子节点。 4. **获取节点...
`IterateControlsSetTextBox`方法遍历指定的控件集合,对每个控件进行检查,如果是TextBox则设置事件处理程序,如果控件有子控件,则递归调用自身处理子控件。 最后,你可以在窗体加载或其他合适的事件中调用`...
在C#中,我们可以使用递归的方式来遍历控件树。从父控件开始,获取其所有子控件,然后对每个子控件执行所需的操作,如修改属性或绑定事件。对于Windows Forms,可以使用`Controls`集合和`Controls.Count`属性,配合...
在Windows Forms(WinForm)开发中,有时我们需要遍历一个窗体或控件的所有子控件,例如查找特定类型的控件、设置控件属性或执行...理解并熟练运用递归遍历控件的方法,将使你在处理WinForm界面逻辑时更加得心应手。
这个函数将从指定的根节点开始,递归遍历树形控件中的每个节点,并根据指定的名称来查找树控件中的某个节点。如果找到目标节点,将返回该节点的句柄,否则返回NULL。 三、结论 CtreeCtrl控件的遍历和查找操作是...
2. **遍历控件**:使用递归的方式遍历整个视图树。对于每个View,我们检查它的类型。如果是TextView(显示文本的控件),我们就设置字体样式;如果是ViewGroup,我们就继续遍历其子视图。 ```java public void ...
它允许程序员递归地遍历一个父窗口的所有子窗口,获取每个控件的句柄(handle)。通过句柄,我们可以进一步获取控件的属性,如类型、标题、位置等,甚至可以操作控件的行为。 在遍历过程中,我们可以为每个控件注册...
- **递归遍历**:通常使用递归函数来遍历控件树。这种方法适用于任何层次结构,包括嵌套的控件。通过调用`Controls`集合获取子控件,并对每个子控件递归调用相同的方法。 - **循环遍历**:对于简单的控件结构,...
为了实现这个功能,我们可以使用递归遍历文件夹和文件,并将其存入 TreeView 中。本文将详细介绍如何使用递归遍历文件夹和文件,并将其存入 TreeView 中。 一、概述 在 ASP.NET 中,我们可以使用 TreeView 控件来...
这个类提供了遍历控件视觉树的方法,它是一个递归结构,包含了所有可视和非可视控件。要查找子控件,可以使用以下方法: 1. **VisualTreeHelper.GetChild()**:此方法接受一个父控件和一个整数索引作为参数,返回父...
本文将深入探讨如何利用C#进行递归遍历文件夹,并将结果展示在TreeView控件中,这一过程不仅展示了C#的强大数据处理能力,也体现了对UI组件的有效利用。 ### C#递归遍历文件夹 递归遍历文件夹是指程序从指定目录...
以上就是关于“C# 基于TreeView递归调用遍历系统盘符的应用实例”的详细讲解,包括了`TreeView`控件的使用、递归遍历文件系统的实现以及关键代码示例。这个实例不仅展示了C#的基本文件操作,还体现了面向对象编程中...
5. **最后,遍历句柄树**:有了句柄结构树,就可以方便地进行各种操作,如查找特定控件、遍历控件层次结构等。 在提供的压缩包文件中,`spyTree.sln`是一个Visual Studio解决方案文件,包含项目的全部配置和源代码...