Страница: 1 |
Страница: 1 |
Вопрос: Сортировка в ListView
Добавлено: 16.07.06 10:42
Автор вопроса: VβÐUηìt | Web-сайт:
Народ, не подскажите, как сделать так, чтобы в ListView все элементы сортировались как в Windows Explorer, т. е. папке были всегда впереди?
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
ENIX
ICQ: 238819245
Вопросов: 9
Ответов: 76
Профиль | | #1
Добавлено: 16.07.06 17:55
Как ты получаеш содержимое (диска, папки)? Оттуда и выходи. Напиши кусочек кода.....а то так в слепую не шиши. Сортировать можно...
For i=1 to n-1
For j=i+1 To n
<тут меняеш местами. Если Масив(i) - это файл, Масив(j)-это папка то поменять местами>
next
next
Это только так в теории...незнаю пробую. А лучше напиши как ты получаеш сожержимое.
Номер ответа: 2
Автор ответа:
LIS
Вопросов: 7
Ответов: 256
Профиль | | #2
Добавлено: 16.07.06 23:46
ViewList.Sorted = True
ViewList.SortKey = 0 ( or 1 or 2 or ...)
ViewList.SortOrder=lvwAscending/lvwDescending
Remember , please , sortkey is column number from 0 to column qty - 1 !
Номер ответа: 3
Автор ответа:
ENIX
ICQ: 238819245
Вопросов: 9
Ответов: 76
Профиль | | #3
Добавлено: 17.07.06 02:35
Я наверно не допонял. А причем тут эта сортировка. Ведь она отсортирует список по названию (цыфры, алфавит), а как она учтет что это папка, а это файл.
Номер ответа: 4
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #4
Добавлено: 17.07.06 07:25
Lis, это как раз я и делаю, только вот, папчи у меня перемешиваются вместе с файлами. Попробую пример ENIX.
Номер ответа: 5
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #5
Добавлено: 17.07.06 07:26
Кстати, содержимое дисков и папок лучше всего узнавать с помощью объекта Dir, Drive и File, а не всяких там Dir(Path as stрынг)
Номер ответа: 6
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #6
Добавлено: 17.07.06 07:57
Эээ... А как в ListView менять местами ээлементы?
Номер ответа: 7
Автор ответа:
ENIX
ICQ: 238819245
Вопросов: 9
Ответов: 76
Профиль | | #7
Добавлено: 17.07.06 13:48
Dim s As String
s = ListView1.ListItems.Item(1).Text
ListView1.ListItems.Item(1).Text = ListView1.ListItems.Item(2).Text
ListView1.ListItems.Item(2).Text = s
Можно типа этого. Но тут с условием что нету ListSubItems тоесть одна колонка. Если две то также и СабИтемсами. Вообще кропотливо все это.
Легче забить и пользоваться Microsoft Scripting Runtime либо юзать АПИ. Первое добавляется в Reference.
Номер ответа: 8
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #8
Добавлено: 17.07.06 15:47
Прикол я понял, только субитемы есть (типы, размеры и т. д.), но все-таки попробую юзануть!
Номер ответа: 9
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #9
Добавлено: 17.07.06 16:22
ENIX, я дополнил твой код для субитемов и иконок, но он почему-то не работает:
Function PomenatMestami(Item1 As ListItem, Item2 As ListItem)
On Error Resume Next
Dim I As Integer
Dim Zad() As String
With ListView1
ReDim Zad(1 To .ColumnHeaders.Count) As String
For I = 2 To .ColumnHeaders.Count
Zad(I) = Item1.SubItems(I)
Item1.SubItems(I) = Item2.SubItems(I)
Item2.SubItems(I) = Zad(I)
Next I
ReDim Zad(0) As String
Zad(0) = Item1.Text
Item1.Text = Item2.Text
Item2.Text = Zad(0)
ReDim Zad(0) As String
Zad(0) = Item1.Icon
Item1.Icon = Item2.Icon
Item2.Icon = Zad(0)
End With
End Function
Номер ответа: 10
Автор ответа:
ENIX
ICQ: 238819245
Вопросов: 9
Ответов: 76
Профиль | | #10
Добавлено: 17.07.06 18:08
Вот так выглядит сортировка. Сотировал по названиям главной колонки: (список в ListView имеет вид)
Название Размер Атрибуты .....
Папка 456КБ h|r
Файл 12КБ h|r
Папка ....
и т.д. не имеет значения сколько колонок.
Сам блок сортировки:
Sub Sort()
Dim i%, j%
With ListView1
For i = 1 To .ListItems.Count - 1
For j = i + 1 To .ListItems.Count
If (.ListItems.Item(i).Text = "Файл" And (.ListItems.Item(j).Text = "Папка" Then
Dim Buffer$, NumHead As Byte
Buffer = .ListItems.Item(i).Text
.ListItems.Item(i).Text = .ListItems.Item(j).Text
.ListItems.Item(j).Text = Buffer
For NumHead = 1 To .ColumnHeaders.Count - 1
Buffer = .ListItems(i).ListSubItems(NumHead).Text
.ListItems(i).ListSubItems(NumHead).Text = .ListItems(j).ListSubItems(NumHead).Text
.ListItems(j).ListSubItems(NumHead).Text = Buffer
Next
End If
Next
Next
End With
End Sub
Как проверять буть то название файлом или папкой..посоветую использовать такой блок:
If GetAttr(<General Path> & .ListItems.Item(i).Text ) And vbDirectory Then 'это папка
If Not (GetAttr(<General Path> & .ListItems.Item(i).Text ) And vbDirectory) Then 'это файл
т.е. можно так вписать в блок сортировки
If (Not (GetAttr(<General Path> & .ListItems.Item(i).Text ) And vbDirectory)) And (GetAttr(<General Path> & .ListItems.Item(j).Text ) And vbDirectory) Then
.....
end if
т.е. вначале проверяем что GetAttr(<General Path> & .ListItems.Item(i).Text ) And vbDirectory)=False т.е. это файл, а потом что j-ый элемент GetAttr(<General Path> & .ListItems.Item(j).Text ) And vbDirectory)=True - это папка.
Пробуй это. Насчет сортировки проверял у себя все вроде работает.
Номер ответа: 11
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #11
Добавлено: 17.07.06 19:35
Спасибо, ENIX!!! Все работает!
Номер ответа: 12
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #12
Добавлено: 17.07.06 21:34
После таких постов VBD, хочеться тебя отправить в самое начало...
Почитать что такое объект и как он работает
Почитать что такое API функции
Почитать элементарные алгоритмы, а то даже 2 переменные местами поменять неможешь
По поводу "папки всегда впереди"
Зачем что-то сортировать? Почему бы просто сначала подучить список папок, уже потом список файлов...
Номер ответа: 13
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #13
Добавлено: 18.07.06 06:29
Зачем что-то сортировать? Почему бы просто сначала подучить список папок, уже потом список файлов...
Неохота связываться с ихними hWND, hDC и всякой подобной фигни.
Попробуй без своих хваленых API поменять местами у них свойство Key.
Номер ответа: 14
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #14
Добавлено: 18.07.06 18:10
lol!
бгагаа....
No Comments.
Номер ответа: 15
Автор ответа:
VβÐUηìt
Вопросов: 246
Ответов: 3333
Web-сайт:
Профиль | | #15
Добавлено: 22.07.06 14:22
HACKER успокойся