Tôi có biểu mẫu có nút "Xóa".VB.NET - Lặp lại thông qua các điều khiển trong đối tượng vùng chứa
Khi người dùng nhấp vào "Xóa", tôi muốn xóa giá trị của tất cả các thành phần hiển thị trên biểu mẫu. Trong trường hợp điều khiển ngày, tôi muốn đặt lại chúng cho ngày hiện tại.
Tất cả các điều khiển của tôi đều có trong Bảng điều khiển.
Hiện tại, tôi đang làm điều này với mã bên dưới. Có cách nào dễ hơn kiểm tra thủ công đối với từng loại điều khiển không? Phương pháp này dường như quá khó sử dụng.
Để làm cho vấn đề tồi tệ hơn, để đệ quy xóa các điều khiển bên trong các thùng chứa con (ví dụ: hộp nhóm trong bảng điều khiển), tôi phải lặp lại toàn bộ con quái vật với phiên bản "GroupBox" quá tải.
Chỉnh sửa: Nhờ các đề xuất của bạn, mã bên dưới được đơn giản hóa rất nhiều.
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: Tôi thích đề nghị của bạn, nhưng khi tôi thay đổi tuyên bố như sau:
Private Sub ClearAllControls(ByRef controls As ControlCollection, Optional ByVal Recurse As Boolean = True)
Sau đó, dòng này mang lại cho tôi "Unable to cast đối tượng của loại 'ControlCollection' gõ ' ControlCollection '. ":
ClearAllControls(panMid.Controls)
gọi cho mehod: raz (Me.Controls) – user3692282
Cố gắng không đăng các giải pháp chỉ mã. – NathanOliver
ok, nhưng, tôi nghĩ rằng đây là một giải pháp cho câu hỏi trên, phải không? – user3692282