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

       

Свойства, события и методы списков


Простейшие и одновременно наиболее популярные свойства, события и методы во многом одинаковы для всех рассмотренных типов списков. Я перечислил их в процедуре, приведенной ниже.

Основным содержанием списка является его свойство Items. Оно представляет собой коллекцию, состоящую изо всех элементов списка. Элементы списков нумеруются с нуля (а не с 1).

Все свойства и методы, рассмотренные в нижеприведенной процедуре применительно к списку ComboBox, относятся также и к остальным типам списков. Исключение – свойство Text списка ListBox.

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

              'Напечатать значение выделенного элемента в списке:

        Debug.WriteLine(ComboBox2.SelectedItem)

              'Напечатать текст из текстового поля списка:

        Debug.WriteLine(ComboBox2.Text)

              'Напечатать номер (индекс) выделенного элемента в списке:

        Debug.WriteLine(ComboBox2.SelectedIndex)

               'Заменить значение элемента под номером 3:

        ComboBox2.Items(3) = "Энергия"

              'Напечатать количество элементов в списке:



        Debug.WriteLine(ComboBox2.Items.Count)

              'Добавить в конец списка новый элемент "Flamengo":

        ComboBox2.Items.Add("Flamengo")

              'Вставить в  список под номером 2 новый элемент "Monaco". Нижележащие элементы сдвинутся:

        ComboBox2.Items.Insert(2, "Monaco")

              'Исключить из списка  элемент "Спартак":

        ComboBox2.Items.Remove("Спартак")

              'Исключить из списка  элемент под номером 9:

        ComboBox2.Items.RemoveAt(9)

              'Напечатать, правда ли, что в списке содержится элемент "Monaco":

        Debug.WriteLine(ComboBox2.Items.Contains("Monaco"))

              'Напечатать, под каким номером в списке значится элемент "Flamengo":

        Debug.WriteLine(ComboBox2.Items.IndexOf("Flamengo"))


End Sub
Если ни один элемент в списке не выделен, значение SelectedIndex равно  -1.
Если вы хотите очистить список, напишите:
        ComboBox2.Items.Clear()
Если вы хотите, чтобы элементы списка были отсортированы по алфавиту, то установите в True свойство Sorted. Не забывайте, что сортировка – текстовая, а не числовая, поэтому если ваш список состоит из числовых строк, то 28 будет стоять выше, чем 5.
Среди разнообразных событий списка упомяну событие SelectedIndexChanged, которое происходит в момент выбора очередного элемента списка.
Удобная работа со списком. В большинстве реальных проектов вам нужно не просто что-то выбрать из списка, но и иметь возможности для удобного изменения списка: добавления, удаления, изменения и перестановки его элементов.
Создадим проект. Разместим на форме простой или раскрывающийся ComboBox и 4 кнопки для разнообразной работы с его списком. Вот функции кнопок:
  • Кнопка «Удаление» удаляет выбранный элемент из списка

  • Кнопка «Добавить» добавляет содержимое текстового поля списка в список (удобно для быстрого внесения дополнений в список)

  • Кнопка «Переставить в конец» переставляет выбранный элемент в конец списка (удобно для произвольной пересортировки  списка)

  • Кнопка «Исправить» заменяет выбранный элемент содержимым текстового поля списка (удобно для исправлений в написании элемента)

  • Попробуйте написать код самостоятельно. Это не очень легко. Если не получится, то вот он:
    Dim Номер As Integer     'Номер выбранного элемента в списке
    Private Sub Удаление(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Удаление.Click
            ComboBox1.Items.Remove(ComboBox1.SelectedItem)
    End Sub
    Private Sub Добавить(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Добавить.Click
            If ComboBox1.Text <> "" Then ComboBox1.Items.Add(ComboBox1.Text)     'Если в поле не пусто, то ...
    End Sub
    Private Sub Переставить(ByVal sender As System.Object, ByVal e As System.EventArgs)  _


    Handles Переставить.Click
            ComboBox1.Items.Add(ComboBox1.Text)                             'Сначала добавляем в конец,
            ComboBox1.Items.Remove(ComboBox1.SelectedItem)  'а затем удаляем с прежнего места
    End Sub
    Private Sub Исправить(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Исправить.Click
            ComboBox1.Items.RemoveAt(Номер)                              'Сначала удаляем старый элемент,
            ComboBox1.Items.Insert(Номер, ComboBox1.Text)        ' а затем на его место вставляем текст из поля
    End Sub
    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)  _
    Handles ComboBox1.SelectedIndexChanged
            Номер = ComboBox1.SelectedIndex
    End Sub
    Пояснения: Поскольку при редактировании текстового поля выделение элемента списка исчезает, я решил узнать номер (индекс) исправляемого элемента заранее, еще до начала редактирования, для чего использовал событие SelectedIndexChanged.
    Замечу, что я, чтобы не утонуть в подробностях, не предохранил проект от неосторожных «нештатных» действий пользователя. Например, кнопка «Переставить в конец» ставит в конец списка, к сожалению, не сам элемент, а содержимое текстового поля, которое вы вполне могли по неосторожности и изменить.
    Задание 4.    
    «Англо-русский словарь». Поместите на форму два раскрывающихся списка. В левый запишите в алфавитном порядке несколько десятков английских слов. В правый запишите в том же порядке переводы этих слов на русский. При выборе слова в левом списке в правом должен появляться перевод.

    Содержание раздела