Durchlaufen Sie alle Kontrollkästchen in einem Formular [Duplikat].
Ich muss alle Kontrollkästchen in einem Formular durchlaufen und die Tag-Eigenschaft für jedes abrufen. Die Kontrollkästchen befinden sich in Gruppenfeldern und verschachtelten Gruppenfeldern. Code, den ich habe, funktioniert für das Hauptformular. Es werden die Werte nicht aus den Kontrollkästchen in den Gruppenfeldern abgerufen
...
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
...
Antworten
Hier ist eine Methode, die Sie einem Formular hinzufügen können, das über die Tabulatorreihenfolge Zugriff auf alle Steuerelemente im Formular bietet:
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
Da dies ein Iterator ist, können Sie andere LINQ-Methoden daran verketten. So bringen Sie das Tag
von jedem CheckBox
in ein Array:
Dim checkBoxTags = GetControls().OfType(Of CheckBox)().
Select(Function(cb) CStr(cb.Tag)).
ToArray()
Wenn Sie diese Methode für mehrere Formulare verwenden möchten, können Sie eine einzelne Erweiterungsmethode hinzufügen, anstatt den Code in jedem Formular zu wiederholen:
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
und nenne es dann in jeder Form, als wäre es ein Mitglied.