我检查并确认控件存在于窗体中。

我迭代了Controls集合中的所有内容,并且控件不在那里,只有包含它的TabControl。这是否意味着在vb.net中我必须设计一个函数来完成vb6可以做的事情?

" />

我检查并确认控件存在于窗体中。

我迭代了Controls集合中的所有内容,并且控件不在那里,只有包含它的TabControl。这是否意味着在vb.net中我必须设计一个函数来完成vb6可以做的事情?

- 源码之家" />

Form.Controls返回Nothing
Frm.Controls("ControlName") 

我检查并确认控件存在于窗体中。

我迭代了Controls集合中的所有内容,并且控件不在那里,只有包含它的TabControl。这是否意味着在vb.net中我必须设计一个函数来完成vb6可以做的事情?

问题描述:

我转换一个项目从VB6到vb.net,我发现一个给定的控制,其经由所述收集控制是一个TabControl内这样Form.Controls返回Nothing <pre><code>Frm.Controls("ControlName") </code></pre> <p>我检查并确认控件存在于窗体中。</p> <p>我迭代了Controls集合中的所有内容,并且控件不在那里,只有包含它的TabControl。这是否意味着在vb.net中我必须设计一个函数来完成vb6可以做的事情?</p>

+0

在.NET中,你将不得不遍历'TabControl'的标签和它们的控制,以便您可以找到它。 –

您可以使用Me.Controls.Find("name", True)搜索形式及其所有子controlsto找到指定名称的控件。结果是包含找到的控件的数组。

例如:

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

下面是如何通过的所有控件递归循环母公司的例子:

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