Mam formularz z przyciskiem "Wyczyść".VB.NET - Iterowanie za pomocą kontrolek w obiekcie kontenerowym
Gdy użytkownik kliknie "Wyczyść", chcę wyczyścić wartość wszystkich widocznych elementów w formularzu. W przypadku kontroli daty chcę zresetować je do bieżącej daty.
Wszystkie moje elementy sterujące znajdują się na panelu.
W tej chwili robię to z poniższym kodem. Czy istnieje łatwiejszy sposób niż ręczne sprawdzanie dla każdego typu kontrolki? Ta metoda wydaje się nadmiernie nieporęczna.
Na domiar złego, aby rekurencyjnie wyczyścić kontrole wewnątrz podkonteneli (tj. Pole grupy w panelu), muszę powtórzyć cały potwór z przeciążoną wersją "GroupBox".
Edytuj: Dzięki Twoim sugestiom poniższy kod jest znacznie uproszczony.
Private Sub btnClear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClear.Click
'User clicks Clear, so clear all the controls within this panel
ClearAllControls(panMid, True) 'True indicates that yes, i want to recurse through sub-containers
End Sub
ClearAllControls(ByRef container As Panel, Optional Recurse As Boolean = True)
'Clear all of the controls within the container object
'If "Recurse" is true, then also clear controls within any sub-containers
Dim ctrl As Control
For Each ctrl In container.Controls
If (ctrl.GetType() Is GetType(TextBox)) Then
Dim txt As TextBox = CType(ctrl, TextBox)
txt.Text = ""
End If
If (ctrl.GetType() Is GetType(CheckBox)) Then
Dim chkbx As CheckBox = CType(ctrl, CheckBox)
chkbx.Checked = False
End If
If (ctrl.GetType() Is GetType(ComboBox)) Then
Dim cbobx As ComboBox = CType(ctrl, ComboBox)
cbobx.SelectedIndex = -1
End If
If (ctrl.GetType() Is GetType(DateTimePicker)) Then
Dim dtp As DateTimePicker = CType(ctrl, DateTimePicker)
dtp.Value = Now()
End If
If Recurse Then
If (ctrl.GetType() Is GetType(Panel)) Then
Dim pnl As Panel = CType(ctrl, Panel)
ClearAllControls(pnl, Recurse)
End If
If ctrl.GetType() Is GetType(GroupBox) Then
Dim grbx As GroupBox = CType(ctrl, GroupBox)
ClearAllControls(grbx, Recurse)
End If
End If
Next
End Sub
@Theraccoonbear: Lubię swoje sugestie, ale kiedy zmienić deklarację do tego:
Private Sub ClearAllControls(ByRef controls As ControlCollection, Optional ByVal Recurse As Boolean = True)
Potem linia ta daje mi „Nie można rzutować obiektu typu«ControlCollection»wpisać" ControlCollection '. ":
ClearAllControls(panMid.Controls)
dzwoń do mehod: raz (Me.Controls) – user3692282
Staraj się nie publikować rozwiązań tylko kodu. – NathanOliver
ok, ale myślę, że jest to rozwiązanie dla powyższego pytania, prawda? – user3692282