Свойства, события и методы списков
Простейшие и одновременно наиболее популярные свойства, события и методы во многом одинаковы для всех рассмотренных типов списков. Я перечислил их в процедуре, приведенной ниже.
Основным содержанием списка является его свойство 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.
«Англо-русский словарь». Поместите на форму два раскрывающихся списка. В левый запишите в алфавитном порядке несколько десятков английских слов. В правый запишите в том же порядке переводы этих слов на русский. При выборе слова в левом списке в правом должен появляться перевод.