Form.Controls returns Nothing if looking for a Control which is in a TabControl or Panel

前端 未结 2 1671
余生分开走
余生分开走 2020-12-21 11:24

I converted a project from vb6 to vb.net where I found a given control that was inside a TabControl via the collection Controls as such

Frm.Controls(\"Contr         


        
相关标签:
2条回答
  • 2020-12-21 11:53

    You can use Me.Controls.Find("name", True) to search the form and all its child controlsto find controls with given name. The result is an array containing found controls.

    For example:

    Dim control = Me.Controls.Find("textbox1", True).FirstOrDefault()
    If (control IsNot Nothing) Then
        MessageBox.Show(control.Name)
    End If
    
    0 讨论(0)
  • 2020-12-21 12:03

    Here's an example of how to recursively loop through all controls by parent:

    Private Function GetAllControlsRecursive(ByVal list As List(Of Control), ByVal parent As Control) As List(Of Control)
        If parent Is Nothing Then Return list
        list.Add(parent)
        For Each child As Control In parent.Controls
            GetAllControlsRecursive(list, child)
        Next
        Return list
    End Function
    
    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Dim allControls As New List(Of Control)
    
        For Each ctrl In GetAllControlsRecursive(allControls, Me) '<= Me is the Form or you can use your TabControl
    
            'do something here...
    
            If Not IsNothing(ctrl.Parent) Then
                Debug.Print(ctrl.Parent.Name & " - " & ctrl.Name)
            Else
                Debug.Print(ctrl.Name)
            End If
        Next
    End Sub
    
    0 讨论(0)
提交回复
热议问题