powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / сортировка в listbox
12 сообщений из 12, страница 1 из 1
сортировка в listbox
    #33128004
Фотография programmator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть листбокс, в нем забиты значения:
1
7
6
3
12
11

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

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

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

А датаформат для чего-то дургого видимо.
...
Рейтинг: 0 / 0
сортировка в listbox
    #33130624
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совет 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
сортировка в listbox
    #33130769
Настенька
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, этот код гениально работает. очень интересно было про это узнать.
...
Рейтинг: 0 / 0
сортировка в listbox
    #33130905
Фотография programmator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
arseny 
Member 

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

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

Было бы очень к стати улучшить Sub ReSort (L As Control), кто то осилит :) ?
...
Рейтинг: 0 / 0
сортировка в listbox
    #33134314
arseny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
сортировка в listbox
    #33135253
arseny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если речь идёт о больших списках, то сортировка очень затягивается.
К примеру, взял на сортировку 1000 элементов.
По примеру SmeL_md, 36 сек (1.8 ГГц проц)
По моему 2 минуты :(

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


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