查找窗体上的所有控件,甚至是选项卡控件中的控件 - VB.net
Find all controls on a form, even those within Tab Controls - VB.net
我有一组在 运行 时间创建的 DataGridView,我需要引用它们以在进行更改时更新它们。
我知道我可以使用
Dim dgvUpdate As DataGridView
dgvUpdate = CType(Me.Controls(strGridName), DataGridView)
获取我需要的数据网格,他们重新 运行 SQL 并重新执行 DataGridView.DataSource.
但是,这些 DataGridView 位于任意数量的不同 TabControl 中的 TabPage 中,因此不会出现在 Me.Controls
中
有没有一种方法能够在代码中引用当前表单中的所有控件,而不考虑选项卡、面板等,我可以在 Ctype 方法中使用它来获取正确的数据网格视图。
您可以使用以下方法按 Tab 键顺序获取窗体上的每个控件:
Public Iterator Function GetControls() As IEnumerable(Of Control)
Dim ctrl = GetNextControl(Me, True)
Do Until ctrl Is Nothing
Yield ctrl
ctrl = GetNextControl(ctrl, True)
Loop
End Function
如果你想用它来获取每个 DataGridView
:
For Each grid In GetControls().OfType(Of DataGridView)()
'Use grid here.
Next
如果您想更直接一些,这将获取特定 TabControl
的任何 TabPage
上的每个 DataGridView
:
For Each grid In TabControl1.TabPages.
Cast(Of TabPage)().
SelectMany(Function(tp) tp.Controls.OfType(Of DataGridView)())
'Use grid here.
Next
您可以使用 Controls.Find递归 搜索。这将按名称找到控件,无论它在其他控件中的嵌套有多深:
Dim dgvName As String = "dataGridView9001"
Dim dgv As DataGridView = Me.Controls.Find(dgvName, True).FirstOrDefault
If Not IsNothing(dgv) Then
' ... do something with "dgv" ...
End If
注意 True
到 Find()
调用的第二个参数,告诉它在子项内搜索。
我有一组在 运行 时间创建的 DataGridView,我需要引用它们以在进行更改时更新它们。 我知道我可以使用
Dim dgvUpdate As DataGridView
dgvUpdate = CType(Me.Controls(strGridName), DataGridView)
获取我需要的数据网格,他们重新 运行 SQL 并重新执行 DataGridView.DataSource.
但是,这些 DataGridView 位于任意数量的不同 TabControl 中的 TabPage 中,因此不会出现在 Me.Controls
中有没有一种方法能够在代码中引用当前表单中的所有控件,而不考虑选项卡、面板等,我可以在 Ctype 方法中使用它来获取正确的数据网格视图。
您可以使用以下方法按 Tab 键顺序获取窗体上的每个控件:
Public Iterator Function GetControls() As IEnumerable(Of Control)
Dim ctrl = GetNextControl(Me, True)
Do Until ctrl Is Nothing
Yield ctrl
ctrl = GetNextControl(ctrl, True)
Loop
End Function
如果你想用它来获取每个 DataGridView
:
For Each grid In GetControls().OfType(Of DataGridView)()
'Use grid here.
Next
如果您想更直接一些,这将获取特定 TabControl
的任何 TabPage
上的每个 DataGridView
:
For Each grid In TabControl1.TabPages.
Cast(Of TabPage)().
SelectMany(Function(tp) tp.Controls.OfType(Of DataGridView)())
'Use grid here.
Next
您可以使用 Controls.Find递归 搜索。这将按名称找到控件,无论它在其他控件中的嵌套有多深:
Dim dgvName As String = "dataGridView9001"
Dim dgv As DataGridView = Me.Controls.Find(dgvName, True).FirstOrDefault
If Not IsNothing(dgv) Then
' ... do something with "dgv" ...
End If
注意 True
到 Find()
调用的第二个参数,告诉它在子项内搜索。