VB.NET通过控件容器迭代

时间:2011-12-17 02:40:34

标签: vb.net controls iteration containers

如何循环遍历容器中的所有控件,以及包含控件的容器中的所有控件,等等。

Form
-Panel
--Control
--Tab
----Control
----Control
--Tab
----Control

以下仅检索-Panel而不检索其他控件

For Each cntrl As Control In Me.Controls

Next

如何在For Each循环中检索所有内容而不为堆栈中的每个级别使用If / Then?

编辑:

Dim ctl As Control = Me
Do
    ctl = Me.GetNextControl(ctl, True)
    'Do whatever you have to ctl
Loop Until ctl Is Nothing

这是迄今为止我发现的最好的方法。

1 个答案:

答案 0 :(得分:2)

您必须定义recursively遍历容器内容器的方法。像这样:

 Dim _list As New List(Of Control)
 Public Sub GetChilds(container As Control)
        For Each child As Control In container.Controls
            _list.Add(child)
            If (child.HasChildren) Then
                GetChilds(child)
            End If
        Next
 End Sub

要调用此方法:

 list=new List(Of Control)
  GetChilds(Me)
  For Each cntrl As Control In _list
    ....
  Next