Удаление дублирующихся записей в ListBox

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Удаление дублирующихся записей в ListBox

Сообщение Malone32® » 07.03.2005 (Пн) 22:21

Как удалить все одинаковые записи в листбоксе??

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.03.2005 (Пн) 22:31

1) сортируем
2) если List1.List(i) = List1.List(i+1), то удаляем List1.List(i)

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 07.03.2005 (Пн) 22:50

Спасибо

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 07.03.2005 (Пн) 23:06

Только код пришлось переделать, т.к. не работал:

Dim i As Integer
On Error GoTo 10
For i = 0 To List1.ListCount
If List1.ItemData(i) = List1.ItemData(i + 1) Then
List1.RemoveItem List1.ItemData(i)
End If
Next
10:
End Sub

Так пашет нормально
Спасибо

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 07.03.2005 (Пн) 23:09

А можно осведомиться, что именно не работало и какая была ошибка? ;)

Я ведь кода не приводил, только общий алгоритм ;)

Ramzes
Скромный человек
Скромный человек
Аватара пользователя
 
Сообщения: 5004
Зарегистрирован: 12.04.2003 (Сб) 11:59
Откуда: Из гробницы :)

Сообщение Ramzes » 07.03.2005 (Пн) 23:24

Дык твой алгоритм и не работал и он его переделал в код :lol: :lol: :lol:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.03.2005 (Пн) 23:39

Amed писал(а):А можно осведомиться, что именно не работало и какая была ошибка? ;)

Я ведь кода не приводил, только общий алгоритм ;)

Ошибка была "индекс вне диапазона", потому что число итемов после удаления уменьшается.

Правильным решением было бы просто запустить цикл от List1.ListCount - 1 до 0 шагом -1 - тогда не нужно никакой замутной обработки ошибок. Ну, или сделать цикл While вместо For.
Изображение

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 08.03.2005 (Вт) 8:46

Если мой код пихнуть в процедуру нажатия кнопки, то с каждым нажатием список уменьшается до 1 строчки. Так что и мой тоже не работает нормально. Щаз попытаюсь последовать совету tyomitch.

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 08.03.2005 (Вт) 9:22

Правильным решением было бы просто запустить цикл от List1.ListCount - 1 до 0 шагом -1 - тогда не нужно никакой замутной обработки ошибок. Ну, или сделать цикл While вместо For.[/quote]


Или я неправильно делаю, или мылсь твоя неверна, т.к. не получается что-то у меня.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.03.2005 (Вт) 9:31

Всё правильно Тёмыч говорит...
Код: Выделить всё
dom i as long
for i=list1.listcount-1 to 1
  if list1.list(i)=list1.list(i-1) then list1.removeitem i
next
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 08.03.2005 (Вт) 13:54

GSerg писал(а):Всё правильно Тёмыч говорит...
Код: Выделить всё
dom i as long
for i=list1.listcount-1 to 1
  if list1.list(i)=list1.list(i-1) then list1.removeitem i
next



Да вроде нет, неправильно

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 08.03.2005 (Вт) 14:05

Ага. GSerg только Step -1 указать забыл :)

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 08.03.2005 (Вт) 14:10

Ага :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Malone32®
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 116
Зарегистрирован: 23.01.2005 (Вс) 21:19
Откуда: Оттуда

Сообщение Malone32® » 08.03.2005 (Вт) 15:07

Отлично, спасибо! :lol:


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 18

    TopList