Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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
Кстати, содержимое дисков и папок лучше всего узнавать с помощью объекта Dir, Drive и File, а не всяких там Dir(Path as stрынг)

Эээ... А как в ListView менять местами ээлементы?


После таких постов VBD, хочеться тебя отправить в самое начало...
Почитать что такое объект и как он работает
Почитать что такое API функции
Почитать элементарные алгоритмы, а то даже 2 переменные местами поменять неможешь :)

По поводу "папки всегда впереди"
Зачем что-то сортировать? Почему бы просто сначала подучить список папок, уже потом список файлов...

Ответить

Номер ответа: 13
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #13
Добавлено: 18.07.06 06:29
По поводу "папки всегда впереди"
Зачем что-то сортировать? Почему бы просто сначала подучить список папок, уже потом список файлов...
Объясняю для тех, кто еще не понял. Сначала я получаю список папок, затем получаю список файлов, затем юзвер сортирует, например, файлы по размеру, и папки перемешиваются нафиг вместе с файлами. Приходится их заново откачивать.
Почитать что такое API функции

Неохота связываться с ихними hWND, hDC и всякой подобной фигни.
Почитать элементарные алгоритмы, а то даже 2 переменные местами поменять неможешь :)

Попробуй без своих хваленых 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 успокойся

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам