Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/33: Рейтинг темы: голосов - 33, средняя оценка - 5.00
9 / 9 / 1
Регистрация: 20.01.2012
Сообщений: 196
1

Удаление одновременно нескольких элементов из ListBox

20.03.2012, 13:54. Показов 6909. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем Привет.
В ListBox выводится большой список организаций из базы. Пользователь должен выделить несколько организаций и удалить их при нажатии на кнопку. При загрузке формы я прописала ListBox1.SelectionMode = SelectionMode.MultiExtended для того чтобы пользователь смог выбирать несколько элементов при нажатии на клавишу shift или ctrl.
VB.NET
1
2
3
4
5
6
7
8
    For i = 0 To ListBox1.Items.Count - 1
            For j = 0 To ListBox1.SelectedItems.Count - 1
                If ListBox1.Items(i).ToString = ListBox1.SelectedItems.Item(j).ToString Then
                    ListBox1.Items.RemoveAt(i)
                    ListBox1.Refresh()
                End If
            Next
        Next
Получается какая то ерунда. Помогите пож та разобраться.
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2012, 13:54
Ответы с готовыми решениями:

Добавление нескольких элементов в ListBox
Есть код: ListBox1.Items.Add("1" & "2") При таком раскладе он добавляет в коллекцию в виде...

Поочередный выбор нескольких элементов в Listbox
Здравствуйте! Организован поиск по listbox 'ам. Всего около 20 Listbox и они скрыты, если есть...

Одновременная прокрутка элементов в нескольких ListBox
Visual Basic 2008. Здравствуйте. Очень нужна помощь - по создаваемому проекту возникла...

Выбор нескольких элементов ListBox и обработка ситуации, когда ничего не выбрано
Здравствуйте. Подскажите пожалуйста, я в свойствах listbox'а поменял на MultiSimple, чтобы была...

20
Заблокирован
20.03.2012, 14:21 2
Бабочка19, а может Вам сюда следует обратиться?
Я могу лишь предположить, что
1. вложенные циклы здесь не нужны - хватит и одного (или организации в списке могут повторяться и надо удалить все вхождения?)
2. идти надо от конца листбокса как-то так
Visual Basic
1
For i = ListBox1.Items.Count - 1 To 0 step -1
0
366 / 127 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
20.03.2012, 14:23 3
Эт тебе в VB.NET надо.
0
Эксперт Hardware
3199 / 1910 / 323
Регистрация: 25.10.2011
Сообщений: 5,557
20.03.2012, 14:25 4
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Command1_Click()
i = 0
Do While i < n
If List1.Selected(i) = True Then
    List1.RemoveItem (i)
    n = n - 1
Else
    i = i + 1
End If
Loop
End Sub
Где n начальное количество элементов списка.

Блин не обратил внимания на синтаксис vb.net
Но думаю и там сработает.
0
366 / 127 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
20.03.2012, 16:56 5
VB.NET
1
2
3
4
5
6
7
8
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i As Long
        For i = 0 To ListBox1.Items.Count - 1
            If ListBox1.SelectedItem = True Then
                ListBox1.Items.Remove(ListBox1.SelectedItem)
            End If
        Next i
    End Sub
Не знаю как здесь обратиться к индексу строки как в VB, чтоб без переменной i обойтись:
VB.NET
1
For ListBox1.listindex = 0 To ListBox1.Items.Count - 1
0
169 / 149 / 14
Регистрация: 13.07.2011
Сообщений: 477
20.03.2012, 17:30 6
вариантов как говорится куча

вот на мой взгляд самый простой

VB.NET
1
2
3
4
5
6
7
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Do While ListBox1.SelectedIndices.Count <> 0 'While ListBox1.SelectedIndices.Count > 0 'Until ListBox1.SelectedIndices.Count = 0
            ListBox1.Items.Remove(ListBox1.SelectedItems(0))
            'ListBox1.Items.Remove(ListBox1.SelectedItem)
            'ListBox1.Items.RemoveAt(ListBox1.SelectedIndices(0))
        Loop
    End Sub

остальное для раздумья (там не только для удаления, но и другое, мало ли пригодится)


VB.NET
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
41
42
43
44
 Do Until ListBox4.SelectedItems.Count = 0
    'For i As Integer = 0 To ListBox4.SelectedItems.Count - 1
            ListBox2.Items.Add(ListBox4.SelectedItems(0)) '
    'ListBox4.Items.RemoveAt(ListBox4.SelectedIndices(0)) '
            ListBox4.Items.Remove(ListBox4.SelectedItems(0))
    'Next
        Loop
 
 
 
 
          Do While ListBox1.SelectedItems.Count > 0
            ListBox2.Items.Add(ListBox1.SelectedItems(0))
            ListBox1.SetSelected(ListBox1.SelectedIndices(0), False)
    'ListBox2.Items.Add(ListBox1.SelectedItem)
    'ListBox1.SetSelected(ListBox1.SelectedIndex, False)
        Loop
 
 
 
 
           Do While ListBox1.FindString("a") > 0
            ListBox1.Items.RemoveAt(ListBox1.FindString("a"))
        Loop
 
 
 
 
        While ListBox1.FindStringExact("asd") > 0
            ListBox1.Items.RemoveAt(ListBox1.Items.IndexOf("asd"))
        End While
 
 
 
 
 
    'For Each item As ListViewItem In ListView1.SelectedItems
    'ListView1.Items(item.Index).Selected = True
    'ListView1.Items(item.Index).Remove 
    'Next
        For s As Integer = 0 To ListView1.SelectedItems.Count - 1
    'ListView2.Items(ListView1.SelectedItems(s).Index).Selected = True
            ListView2.Items(ListView1.SelectedIndices(s)).Selected = True
        Next
1
9 / 9 / 1
Регистрация: 20.01.2012
Сообщений: 196
21.03.2012, 07:53  [ТС] 7
Всем спасибо.
VB.NET
1
2
3
4
5
6
7
8
For i = ListBox1.Items.Count - 1 To 0 Step -1
            For j = 0 To ListBox1.SelectedItems.Count - 1
                If ListBox1.Items(i).ToString = ListBox1.SelectedItems.Item(j).ToString Then
                    ListBox1.Items.RemoveAt(i)
                    ListBox1.Refresh()
                End If
            Next
        Next
Все работает ))))
0
366 / 127 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
21.03.2012, 08:54 8
VB.NET
1
2
3
4
5
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs Handles Button1.Click
        For Each Item In ListBox1.Items.ToString
            ListBox1.Items.Remove(ListBox1.SelectedItem)
        Next
End Sub

Не по теме:

ощущение, что VB.NET инопланетяне придумали, но тем не менее, он мне начинает нравиться :)

0
466 / 180 / 15
Регистрация: 25.02.2012
Сообщений: 417
Записей в блоге: 2
21.03.2012, 18:14 9
Цитата Сообщение от Kogb Посмотреть сообщение
Код vb.net1
VB.NET
1
2
3
4
5
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs Handles Button1.Click
 For Each Item In ListBox1.Items.ToString
 ListBox1.Items.Remove(ListBox1.SelectedItem)
 Next
End Sub
Я думаю что, тут много ошибок:
Конвертация ListBox1.Items на String, удаление всегда выбранного элемента Remove(ListBox1.SelectedItem)
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
21.03.2012, 19:26 10
Как вариант:
VB.NET
1
2
3
        For I As Integer = ListBox1.SelectedIndices.Count - 1 To 0 Step -1
            ListBox1.Items.RemoveAt(ListBox1.SelectedIndices(I))
        Next
1
366 / 127 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
22.03.2012, 02:29 11
Цитата Сообщение от coderxx Посмотреть сообщение
Я думаю что, тут много ошибок ...
Ну а я прежде чем озвучить свои гепотизы проверяю их на практике.
0
466 / 180 / 15
Регистрация: 25.02.2012
Сообщений: 417
Записей в блоге: 2
22.03.2012, 07:53 12
Да я ошибся и рождался ещё одно:
VB.NET
1
2
3
            For Each Item In ListBox1.SelectedItems.ToString
                ListBox1.Items.Remove(ListBox1.SelectedItem)
            Next
Различия: меньше цикла.
0
366 / 127 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
22.03.2012, 08:06 13
Цитата Сообщение от coderxx Посмотреть сообщение
меньше цикла
Да, это лучше.
0
251 / 163 / 14
Регистрация: 10.03.2012
Сообщений: 544
25.03.2012, 13:41 14
Цитата Сообщение от coderxx Посмотреть сообщение
Да я ошибся и рождался ещё одно:
VB.NET
1
2
3
            For Each Item In ListBox1.SelectedItems.ToString
                ListBox1.Items.Remove(ListBox1.SelectedItem)
            Next
Различия: меньше цикла.
Вы здесь повторили ту же ошибку, о которой упомянули в первом своем сообщении. Вместо ListBox1.SelectedItems.ToString нужно писать ListBox1.SelectedItems. А если переменная Item не объявлена, код должен быть такой:
VB.NET
1
2
3
For Each Item As ListViewItem In ListBox1.SelectedItems
    Item.Remove
Next
0
366 / 127 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
25.03.2012, 15:24 15
Цитата Сообщение от iprog Посмотреть сообщение
VB.NET
1
2
3
For Each Item As ListViewItem In ListBox1.SelectedItems
 Item.Remove
Next
Выглядит красиво, но не работает к сожалению
0
251 / 163 / 14
Регистрация: 10.03.2012
Сообщений: 544
25.03.2012, 15:31 16
Цитата Сообщение от Kogb Посмотреть сообщение
Выглядит красиво, но не работает к сожалению
А так?
VB.NET
1
2
3
For Each Item As ListViewItem In ListBox1.SelectedItems
 Item.Remove
Next Item
0
366 / 127 / 28
Регистрация: 17.07.2011
Сообщений: 253
Записей в блоге: 1
25.03.2012, 18:52 17
Нет, так тоже не работает.
0
251 / 163 / 14
Регистрация: 10.03.2012
Сообщений: 544
25.03.2012, 19:29 18
Хм, на С# работает такой код.
C#
1
2
foreach (ListViewItem Item in ListView1.SelectedItems)
                Item.Remove();
Может, нужно написать Item.Remove()?
0
Почетный модератор
21400 / 9134 / 1083
Регистрация: 11.04.2010
Сообщений: 11,014
25.03.2012, 21:04 19
iprog,
Kogb,
У вас там в коде какой то балаган - то ListView, то ListBox...
Лично я ничего не понял, как они в одном коде могут уживаться
0
195 / 187 / 9
Регистрация: 14.06.2011
Сообщений: 495
25.03.2012, 21:46 20
Чего то вы намудрили...

Ларчик просто открывался

VB.NET
1
2
3
4
5
For i = ListBox1.Items.Count - 1 To 0 Step -1
            If ListBox1.SelectedIndices.Contains(i) Then
                ListBox1.Items.Remove(ListBox1.Items(i))
            End If
        Next
0
25.03.2012, 21:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2012, 21:46
Помогаю со студенческими работами здесь

Удаление строки одновременно из listbox и из файла
У меня есть файл, в него заносятся строки через текстбокс, которые отображаются в листбоксе....

Удаление одновременно нескольких записей из БД
Команда удаления cmdDel = new OleDbCommand(&quot;Delete from tBday where iD=&quot; + iDelete + &quot;&quot;,...

Удаление данных из нескольких связанных таблиц одновременно
Ситуация такова,работа с БД,добавление палей в три таблицы(один к одному),изменение данных...

Удаление нескольких строк DeleteString ListBox
z = c_list.GetCount(); c_list.DeleteString(z-1); Удаляет последнюю строку Как допустим...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru