Simplify Your Code with Reflection: Listing 3: VB.NET, Retrieve Property Values
You can use the GetControls method to determine which method to use to retrieve property values. GetControls is responsible for looping through the controls on your form and getting the data from each control. The data is retrieved by calling a method named GetControlValue or GetMultiListValues in the case of a multiple-selection list. The GetControlValue method is the one that uses reflection to retrieve the value.
Private Function GetControls( _
ByVal ctls As Control.ControlCollection) As String
Dim sb As New System.Text.StringBuilder(1024)
Dim dc As DirtyControl
For Each ctl As Control In ctls
If ctl.HasChildren Then
' Recurse into any "Grouping" controls
sb.Append(GetControls(ctl.Controls))
End If
' Get DirtyControl Definition
dc = AppConfig.DirtyControlsList.GetByType( _
ctl.GetType().ToString())
If dc IsNot Nothing Then
If dc.IsMultiList And _
dc.PropertyToCheck = _
String.Empty Then
sb.Append(GetMultiListValues( _
CType(ctl, ListBox)))
ElseIf dc.IsMultiList And _
dc.PropertyToCheck <> String.Empty Then
If GetControlValue(ctl, dc.PropertyToCheck) = _
sb.Append(GetControlValue( _
ctl, dc.Property1))
Else
sb.Append(GetMultiListValues( _
CType(ctl, ListBox)))
End If
ElseIf dc.IsMultiList = False And _
dc.PropertyToCheck <> String.Empty Then
If GetControlValue(ctl, dc.PropertyToCheck) = _
dc.PropertyToCheckValue Then
sb.Append(GetControlValue( _
ctl, dc.Property1))
Else
sb.Append(GetControlValue( _
ctl, dc.Property2))
End If
ElseIf dc.IsMultiList = False And _
dc.Property2 <> String.Empty Then
sb.Append(GetControlValue(ctl, dc.Property1))
sb.Append(GetControlValue(ctl, dc.Property2))
Else
sb.Append(GetControlValue(ctl, dc.Property1))
End If
End If
Next
Return sb.ToString()
End Function