Form.Controls返回Nothing Frm.Controls("ControlName")
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>
您可以使用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
在.NET中,你将不得不遍历'TabControl'的标签和它们的控制,以便您可以找到它。 –