遍历表单上的所有复选框
Loop through all Checkboxes on a form
我需要遍历表单上的所有复选框并为每个复选框获取标签 属性。复选框位于组框和嵌套组框中。我的代码适用于主窗体,它没有从组框中的复选框中获取值
...
i = 0
For Each ctrl As Control In Me.Controls
If (TypeOf ctrl Is CheckBox) Then
'Resize array
ReDim Preserve g_str_Array(i)
'Add Tag to array
g_str_Array(i) = CStr(ctrl.Tag)
i += 1
End If
Next
...
这是一种可以添加到表单的方法,该方法通过 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
因为它是一个迭代器,所以您可以将其他 LINQ 方法链接到它。要将每个 CheckBox
的 Tag
放入数组中:
Dim checkBoxTags = GetControls().OfType(Of CheckBox)().
Select(Function(cb) CStr(cb.Tag)).
ToArray()
如果您想将此方法用于多个表单,则无需在每个表单中重复代码,您可以添加一个扩展方法:
Imports System.Runtime.CompilerServices
Public Module FormExtensions
<Extension>
Public Iterator Function GetControls(source As Form) As IEnumerable(Of Control)
Dim ctrl = source.GetNextControl(source, True)
Do Until ctrl Is Nothing
Yield ctrl
ctrl = source.GetNextControl(ctrl, True)
Loop
End Function
End Module
然后在每个表单中都将其称为成员。
我需要遍历表单上的所有复选框并为每个复选框获取标签 属性。复选框位于组框和嵌套组框中。我的代码适用于主窗体,它没有从组框中的复选框中获取值
...
i = 0
For Each ctrl As Control In Me.Controls
If (TypeOf ctrl Is CheckBox) Then
'Resize array
ReDim Preserve g_str_Array(i)
'Add Tag to array
g_str_Array(i) = CStr(ctrl.Tag)
i += 1
End If
Next
...
这是一种可以添加到表单的方法,该方法通过 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
因为它是一个迭代器,所以您可以将其他 LINQ 方法链接到它。要将每个 CheckBox
的 Tag
放入数组中:
Dim checkBoxTags = GetControls().OfType(Of CheckBox)().
Select(Function(cb) CStr(cb.Tag)).
ToArray()
如果您想将此方法用于多个表单,则无需在每个表单中重复代码,您可以添加一个扩展方法:
Imports System.Runtime.CompilerServices
Public Module FormExtensions
<Extension>
Public Iterator Function GetControls(source As Form) As IEnumerable(Of Control)
Dim ctrl = source.GetNextControl(source, True)
Do Until ctrl Is Nothing
Yield ctrl
ctrl = source.GetNextControl(ctrl, True)
Loop
End Function
End Module
然后在每个表单中都将其称为成员。