Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如果查找TabControl或Panel中的控件,则Form.Controls不返回任何内容_.net_Vb.net_Winforms_Vb6 - Fatal编程技术网

.net 如果查找TabControl或Panel中的控件,则Form.Controls不返回任何内容

.net 如果查找TabControl或Panel中的控件,则Form.Controls不返回任何内容,.net,vb.net,winforms,vb6,.net,Vb.net,Winforms,Vb6,我将一个项目从vb6转换到vb.net,在那里我通过集合控件找到了一个位于TabControl内部的给定控件 Frm.Controls("ControlName") 我检查了,控件确实存在于表单中 我迭代了Controls集合中的所有内容,但该控件不在那里,只有包含它的TabControl。这是否意味着在vb.net中,我必须设计一个函数来执行vb6可以执行的操作?下面是一个如何通过父控件递归循环所有控件的示例: Private Function GetAllControlsRecursive

我将一个项目从vb6转换到vb.net,在那里我通过集合控件找到了一个位于TabControl内部的给定控件

Frm.Controls("ControlName")
我检查了,控件确实存在于表单中


我迭代了Controls集合中的所有内容,但该控件不在那里,只有包含它的TabControl。这是否意味着在vb.net中,我必须设计一个函数来执行vb6可以执行的操作?

下面是一个如何通过父控件递归循环所有控件的示例:

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
私有函数GetAllControlsRecursive(ByVal列表作为列表(控件的),ByVal父控件作为列表(控件的)
如果父项为空,则返回列表
列表。添加(父级)
在parent.Controls中为每个子控件指定控件
GetAllControlsRecursive(列表,子项)
下一个
返回列表
端函数
私有子按钮1\u单击(发送者作为System.Object,e作为System.EventArgs)处理按钮1。单击
将所有控件设置为新列表(控件)

对于GetAllControlsRecursive(allControls,Me)中的每个ctrl键可以使用
Me.Controls.Find(“name”,True)
搜索表单及其所有子控件以查找具有给定名称的控件。结果是一个包含找到的控件的数组

例如:

Dim control = Me.Controls.Find("textbox1", True).FirstOrDefault()
If (control IsNot Nothing) Then
    MessageBox.Show(control.Name)
End If

在.NET中,您必须迭代
TabControl
的选项卡及其控件才能找到它。