У меня есть элемент управления списком в форме, и все столбцы имеют скрытый столбец слева, который я использую для правильной сортировки чисел.
Я хотел бы отсортировать элементы так, чтобы отмеченные элементы были первыми.
Это код, который я использую для сортировки прямо сейчас, но он не выполняет работу для отмеченного элемента.
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


Кажется, что сортировка по флажку не встроена в список. Вы можете решить эту проблему, добавив еще один невидимый столбец рядом с флажком. Вы должны синхронизировать это с флажком - это легко сделать с помощью события 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 в 1, если ColumnHeader.Index = 1