vb.net查找winform中的所有子控件

vb.net查找winform中的所有子控件,vb.net,winforms,Vb.net,Winforms,我有一个win forms应用程序,其中一个表单在不同的容器(FlowLayoutPanels)中有许多控件,其中有ToolStrip控件。我需要找到表单(和容器)中的所有子控件。下面的递归函数在一定程度上起作用,但在ToolStrip、MenuStrip和类似的控件项(按钮、标签、组合框等)中找不到子元素 有关于如何枚举ToolStrip项的建议吗?您可以将列表更改为对象列表,并使用以下代码: Public Sub FindChildren(ByVal parentCtrl As Contro

我有一个win forms应用程序,其中一个表单在不同的容器(FlowLayoutPanels)中有许多控件,其中有ToolStrip控件。我需要找到表单(和容器)中的所有子控件。下面的递归函数在一定程度上起作用,但在ToolStrip、MenuStrip和类似的控件项(按钮、标签、组合框等)中找不到子元素


有关于如何枚举ToolStrip项的建议吗?

您可以将列表更改为对象列表,并使用以下代码:

Public Sub FindChildren(ByVal parentCtrl As Control, ByRef children As List(Of Object))
    If parentCtrl.HasChildren Then
        For Each ctrl As Control In parentCtrl.Controls
            If TypeOf ctrl Is ToolStrip Then
                Dim toll As ToolStrip
                toll = ctrl
                For Each item In toll.Items

                    children.Add(item)
                Next item

            End If
            children.Add(ctrl)
            Call FindChildren(ctrl, children)
        Next ctrl
    End If

End Sub

不能是控件列表属性中的控件。看起来他们将其抽象为工具条的一个特殊部分,称为ToolStripItem,它不是从控件派生的。ToolStripItems是特殊的,它们不是从控件派生的。所以你无法通过这种方式找到它们,不清楚你为什么需要它来工作。@HansPassant谢谢你提供的信息。长话短说,我试图在计算过程中禁用某些ToolStripItems。最后,我将提供一个禁用ToolStrip.Related@RicardoEguia的解决方案,谢谢你的回答。它解决了这个问题。我更新了我的问题,因为我忘了提到菜单项。我会接受你的回答。我只是不知道为什么(和谁)禁用了这个问题?!这是一个合理的问题,几分钟内就提供了两个有用的答案!
Public Sub FindChildren(ByVal parentCtrl As Control, ByRef children As List(Of Object))
    If parentCtrl.HasChildren Then
        For Each ctrl As Control In parentCtrl.Controls
            If TypeOf ctrl Is ToolStrip Then
                Dim toll As ToolStrip
                toll = ctrl
                For Each item In toll.Items

                    children.Add(item)
                Next item

            End If
            children.Add(ctrl)
            Call FindChildren(ctrl, children)
        Next ctrl
    End If

End Sub