양식의 모든 확인란을 반복합니다.
Nov 19 2020
양식의 모든 확인란을 반복하고 각각에 대한 Tag 속성을 가져와야합니다. 체크 박스는 그룹 박스와 중첩 된 그룹 박스에 있습니다. 기본 양식에서 작동하는 코드는 그룹 상자의 확인란에서 값을 가져 오지 않습니다.
...
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
...
답변
1 jmcilhinney Nov 19 2020 at 23:46
다음은 탭 순서를 통해 양식의 모든 컨트롤에 대한 액세스를 제공하는 양식에 추가 할 수있는 방법입니다.
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 메서드를 여기에 연결할 수 있습니다. Tag
각각 CheckBox
을 배열로 가져 오려면 :
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
회원 인 것처럼 각 형식으로 호출합니다.