如何在vb.net中访问多层面板的控件

时间:2013-06-12 10:29:13

标签: vb.net controls panel multi-layer

我想使用以下代码访问表单中的所有控件:

对于Myform.control中的每台电脑

做某事

我的问题是我在myform中有多层面板。例如“Myform”包含(textbox1,textbox 2,combobox1,panle1,panel2)。

Panel1包含(panel11和textbox 3)

面板2包含(panel22和textbox4和combobox2)

另外panel22包含(textbox5和panle222)

如何在“Myform”中访问“全部”控件(文本框和组合框),而不考虑它们是否在面板中。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

这样的事情应该这样做:

Private Sub EnumerateControl(parentControl As Control)
    For Each child As Control In parentControl.Controls
        Debug.WriteLine(child.Name)
        If child.HasChildren Then EnumerateControl(child)
    Next
End Sub

然后调用它来使用它:

EnumerateControl(Me) 'Pass the form control to start the enumeration

这里的关键是测试相关控件是否有子节点,如果是,则通过递归调用EnumerateControl来枚举该控件中的所有控件

答案 1 :(得分:0)

您可以以递归方式访问它们,例如:

Public Sub ProcessControls(ByRef Controls As ControlCollection)
    For Each pc As Control In Controls
        'Do whathever you want

        If pc.Controls.Count Then 'If that control has child, process them
            ProcessControls(pc.Controls)
        End If
    Next
End Sub