我有一个包含多列的ListView。更准确地说,ListView包含8列。其中2个应填充复选框。
目前只有第一列包含复选框。它的定义如下:
While Not rs.EOF
//first column with checkboxes
ListViewCustomer.ListItems.Add , , rs("Id")
ListViewCustomer.ListItems(ListViewCustomer.ListItems.Count).tag = rs("Status")
//second column etc.
ListViewCustomer.ListItems(ListViewCustomer.ListItems.Count).ListSubItems.Add , , rs("name")
....
//Here is the second column, which doesn't display the checkboxes
ListViewCustomer.ListItems(ListViewCustomer.ListItems.Count).ListSubItems.Add , , IIf(IsNull(rs("date_from")), "", rs("date_from"))
ListViewCustomer.ListItems(ListViewCustomer.ListItems.Count).tag = rs("Status2")
Wend
有人知道如何在最后一栏添加复选框吗?
编辑:
是否可以通过添加.Controls
来实现此列?
答案 0 :(得分:1)
ListView
是more expanded version of the ListBox control.
见ListBox control on msdn as well。
它们都显示行记录(ListView具有更高级的格式化选项)。然而,这意味着记录是一行。因此,在选择其中一个项目时选择一行。
复选框的功能是允许用户标记他选择的记录行。
因此,每行只有一个复选框,位于行的前面。
考虑这段代码(这是Excel 2003 VBA,但是给你的想法):
Private Sub UserForm_Initialize()
Dim MyArray(6, 8)
'Array containing column values for ListBox.
ListBox1.ColumnCount = 8
ListBox1.MultiSelect = fmMultiSelectExtended
'Load integer values MyArray
For i = 0 To 5
MyArray(i, 0) = i
For j = 1 To 7
MyArray(i, j) = Rnd
Next j
Next i
'Load ListBox1
ListBox1.List() = MyArray
End Sub
如果您真的想要,可以自定义ListBox
或ListView
。您可以创建一个框架并在其上放置标签和复选框。这是在我测试的Excel2003中执行此操作的唯一方法。 ListBox
对象没有Controls
个孩子。
但这更像是一个数据网格而不是ListBox
或ListView
,根据定义,它们是记录(行)的列表。
<强>更新强>
我看到了您的更新,并且您确实希望将CheckBox
放在行的末尾。
如果您只想在最后一行选中一个复选框,则可以执行此自定义复选框。同样,这是为ListBox
编写的,因此如果您愿意,需要将其转换为ListView
。
仍然需要自定义处理,但我有一些时间,所以我做了这个代码。看看你是否喜欢它:
Private Sub ListBox1_Change()
For i = 0 To ListBox1.ListCount - 1
ListBox1.List(i, 3) = ChrW(&H2610)
Next i
ListBox1.List(ListBox1.ListIndex, 3) = ChrW(&H2611)
End Sub
Private Sub UserForm_Initialize()
Dim MyArray(5, 3)
'Array containing column values for ListBox.
ListBox1.ColumnCount = 4
ListBox1.MultiSelect = 0
ListBox1.ListStyle = 0
'Load integer values MyArray
For i = 0 To 5
MyArray(i, 0) = i
For j = 1 To 2
MyArray(i, j) = Rnd
Next j
MyArray(i, 3) = ChrW(&H2610)
Next i
'Load ListBox1
ListBox1.List() = MyArray
End Sub