ПОНЯТНО О Visual Basic NET (том 3)




Работаем с ListView в коде - часть 3


Работаем со списком ListView. В качестве примера работы со списком ListView я выбрал добавление игр в список, удаление игр из списка и исправление строк списка. Список ListView поддерживает множественный выбор и я это учел. Если вы выделили одну строку, то удаляется и исправляется только эта одна строка, если же вы выделили несколько строк, то удаляются и исправляются сразу все выделенные строки. Чтобы множественный выбор был возможен, нужно установить в True свойство MultiSelect.

Добавление:

Private Sub Добавить(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Добавить.Click

        'Добавляем в список строку и одновременно заполняем ее первый столбец:

        LV.Items.Add(InputBox("Введите название игры"))

        'Добавляем в строку еще два элемента:

        LV.Items(LV.Items.Count - 1).SubItems.Add(InputBox("Введите объем игры в мегабайтах")) 

        LV.Items(LV.Items.Count - 1).SubItems.Add(InputBox("Оцените качество графики (да-нет)"))

End Sub

Пояснения: Номер  LV.Items.Count-1  имеет как раз только что добавленная в список строка.

Удаление:

Private Sub Удаление(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Удаление.Click

        For i = LV.Items.Count - 1 To 0 Step -1

            If LV.SelectedIndices.Contains(i) Then

                LV.Items(i).Remove()

            End If

        Next

End Sub

Пояснения: В списке ListView имеются коллекции SelectedItems и SelectedIndices. Они состоят из выбранных элементов и их номеров соответственно. В коллекции SelectedIndices имеется метод Contains, который определяет, входит ли некоторый номер элемента списка ListView (в нашем случае i) в эту коллекцию. Поэтому оператор

            If LV.SelectedIndices.Contains(i) Then

можно перевести так: «Если среди номеров выбранных элементов списка встречается число i, то …».

Обратите внимание, что цикл по строкам идет не сверху вниз, а снизу вверх. Я был вынужден это сделать, так как в процессе удаления нескольких строк получается, что после удаления очередной строки все нижние строки сдвигаются вверх, а значит следующей строкой удаляется не та, что нужно, а нижележащая.

Исправление:

Private Sub Исправить(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Исправить.Click

        Dim Название As String = InputBox("Введите название игры")

        Dim Объем As String = InputBox("Введите объем игры в мегабайтах")

        Dim Графика As String = InputBox("Оцените качество графики (да-нет)")

        For i = 0 To LV.Items.Count - 1

            If LV.SelectedIndices.Contains(i) Then

                LV.Items(i).SubItems(0).Text = Название

                LV.Items(i).SubItems(1).Text = Объем

                LV.Items(i).SubItems(2).Text = Графика

            End If

        Next

End Sub

Пояснения: После исправления все выделенные строки становятся одинаковыми.




Содержание  Назад  Вперед