首页 > 解决方案 > vb.net 查找winform中的所有子控件

问题描述

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

Public Sub FindChildren(ByVal parentCtrl As Control, ByRef children As List(Of Control))
  If parentCtrl.HasChildren Then
    For Each ctrl As Control In parentCtrl.Controls
      children.Add(ctrl)
      Call FindChildren(ctrl, children)
    Next ctrl
  End If
End Sub

对如何枚举 ToolStrip 项目有任何建议吗?

标签: vb.netwinforms

解决方案


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

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

推荐阅读