Елемент управління ListBox

Елемент управління ListBox, розміщений у формі, являє собою список, з якого користувач може вибрати одне із запропонованих значень. Значення в списку можуть розміщуватися в одну або кілька колонок залежно від значення властивості MultiColumn. Якщо елементи списку розташовані в декількох колонках, за допомогою властивості ColumnWidth можна змінити задану за замовчуванням ширину колонок.

Рис.1. Елемент управління ListBox на панелі Toolbar

У тому випадку, якщо елементи списку не поміщаються в виділену для них у формі область, з'являються смуги прокрутки, що дозволяють переглянути весь список. Щоб смуга прокрутки елемента управління ListBox завжди відображалася, необхідно присвоїти значення True властивості ScrollAlwaysVisible.

Можливість часткового відображення елемента списку задається за допомогою властивості IntegralHeight. Якщо вказано значення True, то в списку може відображатися тільки рядок цілком.

Додавання елементів до списку

Елементи в список можуть додаватися під час розробки та програмно. При формуванні списку під час проектування за допомогою властивості Items вручну задається весь необхідний список. Для цього слід вибрати властивість і натиснути розташовану праворуч кнопку з трьома крапками. Відкриється діалогове вікно String Collection Editor (Редактор елементів списку), показане на рис. 2. Кожен рядок поля введення відповідає одному елементу. Порожній рядок може також бути елементом списку. Після задання всіх елементів потрібно натиснути кнопку OK, вікно редактора елементів списку закриється, а елемент управління ListBox буде відображати задані значення.

Рис.2. Діалогове вікно String Collection Editor

Дані в список не обов'язково вводити в алфавітному порядку, оскільки їх можна впорядкувати, встановивши для властивості Sorted (Сортування) значення True. У цьому випадку нові елементи списку будуть розташовуватися в алфавітному порядку.

Для додавання елементів в список програмним способом призначений метод Add колекції Items елемента управління ListBox. Як правило, даний метод поміщається в редактор коду після ініціалізації компонентів.

Важливо!

Поняття "колекція" введено в Visual Basic для полегшення зміни властивостей групи об'єктів. Якщо елементи входять в колекцію, для зміни їх загальної властивості можна використовувати найменування колекції і спеціальну форму оператора циклу For. Іншими словами, колекцію можна порівняти з масивом змінних, оскільки звертатися до вхідних в неї об'єктів можна як до елементів масиву. Наприклад, для програмного додавання імен столиць в список необхідно доповнити код такими рядками:

        ListBox1.Items.Add("Афіни, Греція")

        ListBox1.Items.Add("Брюсель, Бельгія")

        ListBox1.Items.Add("Варшава, Польша")

Для додавання відразу декількох елементів в список можна використовувати метод AddRange. Тоді попередній код можна замінити такими рядками:

        Dim capitals() As String = {"Афіни, Греція", "Брюсель, Бельгія", _

                                    "Варшава, Польша"        ListBox1.Items.AddRange(capitals)

Щоб в списку не було однакових рядків, необхідно перед додаванням елемента здійснювати перевірку на його існування за допомогою методу Contains. Тоді код буде мати наступний вигляд:

        Dim list As String() = {"Афіни, Греція", "Брюсель, Бельгія", _

                                "Мінськ, Білорусь", "Варшава, Польша"}

        For Each item As String In list

            If Not ListBox1.Items.Contains(item) Then

                ListBox1.Items.Add(item)

            End If

        Next item

Видалення елементів зі списку

Visual Basic дозволяє видаляти елементи зі списку програмно за допомогою методів Remove і RemoveAt колекції Items елемента управління ListBox. Для видалення елемента з його тексту використовується метод Remove:

        ListBox1.Items.Remove("Мінськ, Білорусь")

Щоб видалити зі списку елемент по його індексу, необхідно скористатися методом RemoveAt. Наступний рядок дозволяє видалити перший елемент списку:

        ListBox1.Items.RemoveAt(0)

За допомогою цих методів також можна видалити зі списку виділений елемент:

        ListBox1.Items.Remove(ListBox1.SelectedItem)

 або

        ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)

Властивості SelectedItem і SelectedIndex задають відповідно текст і індекс виділеного елемента списку.

Для видалення всіх елементів зі списку призначений метод Clear колекції Items елемента управління ListBox:

        ListBox1.Items.Clear()

Додавання візуального ефекту в список

Щоб під час виконання додатка вставити елемент списку, потрібно скористатися методом Insert колекції Items елемента управління ListBox. Цей метод дозволяє створити новий елемент списку в певному місці списку. Наприклад, за допомогою наступного рядка можна вставити ім'я столиці в початок списку:

        ListBox1.Items.Insert(0, "Brussels, Belgium")

Примітка

Якщо встановлене сортування за алфавітом, тобто задано значення True для властивості Sorted, то зазначена в методі Insert позиція елемента ігнорується і елемент займає позицію відповідно до алфавітного порядку.

Вибір декількох елементів зі списку

Visual Basic 2010 дає змогу використовувати списки, які дозволяють користувачеві вибирати з них кілька елементів. Для створення таких списків призначена властивість SelectionMode. Вона може приймати значення, представлені в таблиці 1.

Таблиця 1. Значення властивості SelectionMode

 Значення Опис 
 MultiExtended  Дозволено вибір кількох елементів за допомогою стандартних методів Windows. Для вибору поспіль розташованих елементів необхідно, утримуючи клавішу <Shift> вибрати перший елемент, а потім останній. При цьому будуть обрані всі розміщені між ними елементи. Для вибору елементів   розташованих не підряд слід натиснути клавішу <Ctrl> і, утримуючи її, виділити необхідні елементи списку
 MultiSimple  Дозволено вибір кількох елементів клацанням миші або натисканням клавіші <Пропуск>. Для скасування вибору необхідно зафіксувати покажчик миші або натиснути клавішу <Пропуск> ще раз
 None  Забороняє вибирати елементи списку
 One  Стандартний список, який використовується за умовчанням. Дозволяє вибирати одне значення

Доступ до елементів списку

Часом необхідно мати можливість звернутися до певного елементу списку. Для доступу до елементів списку призначена властивість Items елемента управління ListBox. Звернення до елементу здійснюється через індекс, що визначає його положення в списку. Нумерація елементів списку починається з 0. Наприклад, текст text1 і text2 першого і п'ятого елементів списку можна отримати за допомогою команд:

        Dim text1 As String = ListBox1.Items(0)

        Dim text2 As String = ListBox1.Items(4)

Властивість Count колекції Items дозволяє визначити кількість елементів у списку. Це значення можна використовувати, наприклад, в тому випадку, якщо потрібно обробляти елементи списку в циклі. За допомогою наступного рядка можна отримати число рядків num в списку:

        Dim num As Integer = ListBox1.Items.Count

Виділені елементи списку

Для визначення виділених користувачем елементів або їх програмного задання служать зазначені в таблиці 2 властивості.

Таблиця 2. Властивості, що визначають виділенні об'єкти

 Властивість Опис 
 SelectedIndex  Задає або повертає номер виділеного елемента списку. Якщо ви не вкажете один елемент зі списку, то повертає значення -1
 SelectedIndices  Задає або повертає номери обраних елементів списку. Являє собою колекцію індексів обраних елементів списку
 SelectedItem  Задає або повертає текст вибраного елементу списку
 SelectedItems  Задає або повертає колекцію обраних елементів списку

Примітка

Доступ до елементів колекцій SelectedIndices і SelectedItems, що включають вибрані елементи списку, здійснюється аналогічно доступу до колекції Items.

Щоб задати елементи списку, які виділені по замовчуванню, під час запуску програми можна використовувати властивості з таблиці 2 або метод SetSelected елемента управління ListBox, який повинен виглядати так:

    Sub SetSelected(ByVal index As Integer, ByVal value As Boolean)

де:

  • Index - номер елемента в списку;
  • Value - значення True дозволяє виділити зазначений елемент, а значення False - зняти з нього виділення.

Якщо необхідно зняти виділення з усіх елементів списку, застосовується метод ClearSelected елемента управління ListBox.

Розглянемо невеликий приклад, що демонструє використання властивості SelectedItems. Для цього розмістимо в формі два списки. У перший список елементи введемо за допомогою властивості Items, а другий список буде відображати вибрані в першому списку елементи. Для створення програму, виконайте такі дії:

1. Додайте в форму два списки, використовуючи для цього елемент управління ListBox.

2. За допомогою властивості Items першого списку введіть елементи списку.

3. Щоб дозволити вибір з першого списку декількох елементів, встановіть для його властивості SelectionMode значення MultiSimple.

4. Тепер необхідно задати процедуру формування елементів другого списку при виборі елементів першого списку. Для цього у вікні редактора коду із списку Class Name (Ім'я класу) виберіть елемент керування ListBox, що відповідає першому списку форми, а із списку Method Name (Ім'я методу) - подію SelectedIndexChanged, що викликається при зміні списку обраних елементів.

5. Додайте в тіло процедури наступний код:

        Dim i As Integer

        ListBox2.Items.Clear()

        For i = 0 To ListBox1.SelectedItems.Count - 1

            ListBox2.Items.Add(ListBox1.SelectedItems(i))

        Next

Цей код дозволяє при натисканні кнопкою миші на будь-якому елементі спочатку очистити вміст другого списку, а потім заповнити його виділеними в першому списку елементами. (рис.3.)

Рис.3. Вибрані з першого списку значення відображаються в другому списку

Пошук елемента списку

Якщо необхідно визначити індекс елемента списку, який починається з зазначених символів, можна використовувати метод FindString елемента управління ListBox, що має такий синтаксис:

    Function FindString(ByVal s As String, ByVal startIndex As Integer) As Integer

де:

  • S - текст шуканого елемента списку;
  • StartIndex - позиція, з якої починається пошук елемента. Даний параметр можна опустити, тоді пошук буде здійснюватися з початку списку.

Якщо елемент не знайдений, то повертається значення ListBox.NoMatches, що відповідає числу -1.

Для знаходження елемента списку, текст якого відповідає зазначеному, призначений метод FindStringExact елемента управління ListBox, що має аналогічний методу FindString синтаксис.

За допомогою наступного коду можна видалити зі списку всі елементи, що починаються з літери М:

        Dim i As Integer = ListBox1.FindString("M")

        While Not i = ListBox1.NoMatches

            ListBox1.Items.RemoveAt(i)

            i = ListBox1.FindString("M", i)

        End While