Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / сортировка в listbox / 12 сообщений из 12, страница 1 из 1
22.06.2005, 08:17:05
    #33128004
programmator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка в listbox
есть листбокс, в нем забиты значения:
1
7
6
3
12
11

если я ставлю свойство sorted = true, то результат такой
1
11
12
3
6
7

а мне надо, чтобы сортировка была в обычном порядке, чтобы получилось: 1 3 6 7 11 12. как это сделать? подскажите!!!
...
Рейтинг: 0 / 0
22.06.2005, 12:55:36
    #33128684
Гегель
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка в listbox
Вариантов м.б. много, некоторые:
1. Загнать значения в массив, отсортировать и в ListBox
2. Использовать format$(number,"00000000")
Если не хотите отображать лишние 0, то используйте 2 листбокса: один скрытый сортированный, другой обычный, в который берете значения из скрытого.
...
Рейтинг: 0 / 0
22.06.2005, 13:03:45
    #33128697
arseny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка в listbox
ГегельВариантов м.б. много, некоторые:
1. Загнать значения в массив, отсортировать и в ListBox
2. Использовать format$(number,"00000000")
Если не хотите отображать лишние 0, то используйте 2 листбокса: один скрытый сортированный, другой обычный, в который берете значения из скрытого.
2. Вместо второго листбокса, можно использовать ListView, там сделать две колонки, в первую обычные значения, а во вторую загнать format$(number,"00000000") и сортировать по второй колонке. Вторую колонку скрыть.
Такой принцып уже применял.
Да и остортировать в массиве, как Гегель сказал, а потом загнать в листбокс, тоже неплохо.
...
Рейтинг: 0 / 0
23.06.2005, 10:36:33
    #33130512
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка в listbox
ввела формат, который вы сказали в поле свойство dataformat.
но ничего не изменилось. даже когда я процентный выбираю, он их тоже не отображает. листбокс я заполняю через свойство list.
...
Рейтинг: 0 / 0
23.06.2005, 10:47:36
    #33130553
arseny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка в listbox
Вы с программатором напару проект пишите? :)

List1.AddItem Format(11, "00000")
или
List1.List(2) = Format(List1.List(2), "00000")

А датаформат для чего-то дургого видимо.
...
Рейтинг: 0 / 0
23.06.2005, 11:05:13
    #33130624
SmeL_md
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка в listbox
Совет 167. Сортировка пронумерованных элементов в окне списка
Предположим, что у вас есть пронумерованные элементы (в нашем случае - файлы):
FILE1.BMP FILE2.BMP FILE3.BMP FILE10.BMP
Если вы поместите их в элемент управления ListBox или ComboBox, то после сортировки они будут представлены в списке следующим образом:
FILE1.BMP
FILE10.BMP
FILE2.BMP
FILE3.BMP
А вы хотите, чтобы они выводились так:
FILE1.BMP
FILE2.BMP
FILE3.BMP
FILE10.BMP
Для этого можно использовать подпрограмму ReSort (листинг 3). После того как вы заполните окно списка, вызовите ReSort, передав исходный элемент управления ListBox или ComboBox в качестве единственного параметра, например Call ReSort(List1).

Листинг 3
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Sub ReSort(L As Control)
   '
   Dim P%, PP%, C%, Pre$, S$, V&, NewPos%, CheckIt%
   Dim TempL$, TempItemData&, S1$
   '
   For P =  0  To L.ListCount -  1 
       S = L.List(P)
       For C =  1  To Len(S)
           V = Val(Mid$(S, C))
           If V >  0  Then Exit For
       Next
       If V >  0  Then
           If C >  1  Then Pre = Left$(S, C -  1 )
           NewPos = - 1 
           For PP = P +  1  To L.ListCount -  1 
               CheckIt = False
               S1 = L.List(PP)
               If Pre <> "" Then
                   If InStr(S1, Pre) =  1  Then _
                       CheckIt = True
               Else
                   If Val(S1) >  0  Then CheckIt = True
               End If
               If CheckIt Then
                   If Val(Mid$(S1, C)) < V Then _
                       NewPos = PP
               Else
                   Exit For
               End If
           Next
           If NewPos > - 1  Then
               TempL = L.List(P)
               TempItemData = L.ItemData(P)
               L.RemoveItem (P)
               L.AddItem TempL, NewPos
               L.ItemData(L.NewIndex) = TempItemData
               P = P -  1 
           End If
       End If
   Next
End Sub

Совет был опубликован в журнале "Компьютер-Пресс" №№ 3/1996 - 12/2001
...
Рейтинг: 0 / 0
23.06.2005, 11:41:57
    #33130769
Настенька
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка в listbox
Спасибо, этот код гениально работает. очень интересно было про это узнать.
...
Рейтинг: 0 / 0
23.06.2005, 12:17:47
    #33130905
programmator
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка в listbox
Код: plaintext
1.
2.
3.
4.
arseny 
Member 

Откуда: Israel
Сообщений:  136   Вы с программатором напару проект пишите? :) 

Настя зашла подо мной. Она и Я Programmator за проксей, форум глючит
Код: plaintext
Произошла ошибка. Возможно была попытка обойти защиту форума. Попробуйте опубликовать сообщение еще раз.
...
Рейтинг: 0 / 0
24.06.2005, 17:06:29
    #33134051
SmeL_md
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка в listbox
А какие есть идеи сортировки текстовых значений времени.
для наглядности
01.01.01
01.01.02
01.02.01
Просортираванно правильно, но для сортировки времененных значений не приемлемо.

Было бы очень к стати улучшить Sub ReSort (L As Control), кто то осилит :) ?
...
Рейтинг: 0 / 0
24.06.2005, 20:07:59
    #33134314
arseny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка в listbox
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Sub ReSort(lstBox As ListBox)
    Dim iIndex As Integer
    Dim iIndex2 As Integer
    Dim dtDateTemp As Date
    
    
    
    For iIndex =  0  To lstBox.ListCount -  2 
        For iIndex2 = iIndex To lstBox.ListCount -  1 
            If CDate(lstBox.List(iIndex)) > CDate(lstBox.List(iIndex2)) Then
                dtDateTemp = CDate(lstBox.List(iIndex))
                
                lstBox.List(iIndex) = CDate(lstBox.List(iIndex2))
                lstBox.List(iIndex2) = dtDateTemp
            End If
        Next
    Next
End Sub
...
Рейтинг: 0 / 0
26.06.2005, 15:04:20
    #33135253
arseny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка в listbox
Если речь идёт о больших списках, то сортировка очень затягивается.
К примеру, взял на сортировку 1000 элементов.
По примеру SmeL_md, 36 сек (1.8 ГГц проц)
По моему 2 минуты :(

А в листвью моментально отсортировывает!
И даты туда можно засунуть (используя дополнительную колонку).
...
Рейтинг: 0 / 0
28.07.2005, 17:44:32
    #33190173
Guest11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сортировка в listbox
to arseniy: a kak sdelat sortirovky dlya Date values v ListView,y menya poka ne polychaetsya,podskaji pojalysta esli znaesh
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / сортировка в listbox / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]