目前我有一个按日期过滤搜索条件的程序。可以选择四个不同的字段(为保密而编辑):截止日期,开始日期,作业1到期&工作2到期。可以从包含选项全部,去年,上个月,上周,今天,本周,本月,今年,自定义的组合框中选择搜索条件。无论您选择哪个范围,都会显示在组合框旁边的两个文本框中,以显示过滤器的开始日期和结束日期。四个ComboBox和八个相关的TextBox都在一个名为TableLayoutPanel的控件中。
我想通过添加额外的行来过滤结果来扩展我的程序的灵活性。例如,也许有人想要本周的截止日期或在几个月内的自定义范围内。该程序目前工作正常,它只是我可以使这个工作的唯一方法是创建一个全新的ComboBoxes行。我显然需要混合使用ComboBoxes和TextBoxes。我试图创建一个List(Of List(Of Object))但我的代码会抛出错误。以下是一些代码:
Dim Boxes As List(Of List(Of ComboBox))
Private Sub AddRow1()
Try
Dim z As Integer = 0
TableLayoutPanel.RowCount += 1
TableLayoutPanel.GrowStyle = TableLayoutPanelGrowStyle.AddRows
TableLayoutPanel.AutoSize = True
TableLayoutPanel.RowStyles.Add(New System.Windows.Forms.RowStyle(SizeType.AutoSize))
For j = 0 To 11
Boxes.Add(New List(Of ComboBox))
Boxes.Item(TableLayoutPanel.RowCount - 3).Add(New ComboBox)
If Boxes.Item(TableLayoutPanel.RowCount - 3).Item(j).Created = False Then
Boxes.Item(TableLayoutPanel.RowCount - 3).Item(j).Dock = DockStyle.Fill
AddHandler Boxes.Item(TableLayoutPanel.RowCount - 3).Item(j).TextChanged, AddressOf Me.concat
If (j = 0 Or j = 3 Or j = 6 Or j = 9) Then
For Each it In Copy(z)
Boxes.Item(TableLayoutPanel.RowCount - 3).Item(j).Items.Add(it)
Next
z = z + 1
End If
If (j = 0 Or j = 3 Or j = 6 Or j = 9) Then
Boxes.Item(TableLayoutPanel.RowCount - 3).Item(j).AutoCompleteSource = AutoCompleteSource.ListItems
Boxes.Item(TableLayoutPanel.RowCount - 3).Item(j).AutoCompleteMode = AutoCompleteMode.SuggestAppend
End If
End If
TableLayoutPanel.Controls.Add(Boxes.Item(TableLayoutPanel.RowCount - 3).Item(j), j, TableLayoutPanel.RowCount - 1)
Next
DataGridView.Height = DataGridView.Height - 25
DataGridView.Dock = DockStyle.Bottom
Catch
End Try
End Sub
创建List(Of List(Of Object)会在AddHandler方法调用和此方法中的其他一些地方抛出错误,但我相信我需要能够添加一行ComboBoxes和TextBoxes。
答案 0 :(得分:0)
创建List(Of List(Of Control))
,然后可能使用TypeOf根据实际控制情况做出选择。
例如:
If TypeOf ctl Is ComboBox Then
AddHandler CType(ctl, ComboBox).SelectedIndexChanged, AddressOf Handler1
ElseIf TypeOf ctl Is TextBox Then
AddHandler CType(ctl, TextBox).TextChanged, AddressOf Handler2
End If
另外,请注意,不同控件的许多事件都以相同的方式命名和修饰。对于TextBox和ComboBox,TextChanged
完全相同,并且一个处理程序可以处理这两种控件类型的事件。
使用Control而不是Object也可以更准确地指定类型,使您可以访问所有控件共享的许多属性,例如高度,文本等。指定类型越准确,就越容易。