我在表单上有一个listview控件,并且所有列的左侧都有一个隐藏的列,用于正确地对数字进行排序。
我想对项目进行排序,以使选中的项目排在首位。
这是我现在用来排序的代码,但它并未完成Checked项目的工作。
Private Sub lstProgramOrder_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
With lstProgramOrder
.SortKey = IIf(ColumnHeader.Index = 1, 1, ColumnHeader.Index - 2)
If .SortOrder = lvwAscending Then
.SortOrder = lvwDescending
Else
.SortOrder = lvwAscending
End If
.Sorted = True
End With
End Sub
答案 0 :(得分:0)
看来,按复选框排序不是建立在列表视图中。您可以通过在复选框旁边添加另一个不可见的列来解决该问题。您必须使其与复选框保持同步-这可以通过事件ItemCheck
(在您的情况下为lstProgramOrder_ItemCheck
)中轻松完成。
您只需要下定决心要在新列中写入什么。我选择写0
代表选中项,1
代表未选中项,以便选中项排在最前面。
假设此虚拟列添加到复选框(索引1)旁边:
Private Sub lstProgramOrder_ItemCheck(ByVal Item As MSComctlLib.ListItem)
Item.ListSubItems(1) = IIf(Item.Checked, "0", "1")
End Sub
然后,在Column_Click
例程中,如果.SortKey
ColumnHeader.Index = 1
设置为1。