- •Основы создания оконных приложений Особенности поведения оконных приложений.
- •Первое оконное приложение
- •Элементы управления
- •Событийно-управляемая модель выполнения оконного приложения
- •Принцип распределения ответственности
- •Элемент управления Timer
- •Динамическое управление обработчиками
- •Вопрос 1: Перед тем как оператор
- •Вопрос 2: Можно ли связать с событием несколько обработчиков и что при этом происходит?
- •Вопрос 3: Можно ли выполнить обратную операцию – исключить обработчик из списка?
- •Элемент управления ListBox
- •Параметры событий. Каскад событий
- •Использование визуального дизайнера
- •Редактирование свойств элементов управления
- •Анализ сгенерированного исходного кода
- •Сохранение результатов
- •Управление объектами файловой системы
- •Информация о логических дисках (класс DriveInfo)
- •Работа с каталогами (папками)
- •Работа с файлами
- •Стандартные диалоговые окна
- •Сериализация
- •Объектные графы
- •Формат сериализации
- •Реконструкция объектов
- •Использование SoapFormatter и XmlSerializer
- •Сохранение коллекций объектов
- •Архитектура программных систем
- •Собственные производные классы элементов управления
- •Другие элементы управления
- •Класс Control
- •Использование возможностей класса Control
- •Ответ на события MouseMove
- •Регистрация щелчков кнопок мыши
- •Ответ на события клавиатуры
- •Функциональные возможности класса Form
- •Цикл существования типа Form
- •Form (Форма)
Элемент управления ListBox
Часто возникает необходимость отображать в окне большое множество информационных элементов на сравнительно небольшом пространстве. Для этого хорошо подходят списки с вертикальными линейками прокрутки. Такие элементы создаются как объекты класса ListBox. Класс ListBox сочетает в себе свойства визуального элемента и знакомого Вам контейнерного класса ArrayList.
Для демонстрации возможностей этого элемента создайте оконное приложение, в окне которого располагаются кнопка button1 и список listBox1.
Для управления обычными визуальными свойствами у класса ListBox имеются уже знакомые свойства – Height, Width, Top, Left и т.д. Для доступа к «контейнерным» функциям следует использовать свойство Items. Items представляет все множество элементов, находящихся в списке. Возможности этой коллекции сходны с возможностями ArrayList. В первую очередь это означает, что в список с помощью метода Add можно добавлять элементы любых типов.
Например, для добавления в список целого числа 1 можно выполнить оператор listBox1.Items.Add(1).
Следующий обработчик щелчка по кнопке добавляет в список разные объекты:
private void button1_Click(object sender, EventArgs e)
{
Random r=new Random();
switch (r.Next(1, 5))
{ case 1: listBox1.Items.Add(1); break;
case 2: listBox1.Items.Add('a'); break;
case 3: listBox1.Items.Add("Hi"); break;
case 4: listBox1.Items.Add(new Random()); break;
}
}
Все элементы успешно отображаются в списке. Даже объект-генератор случайных чисел:
Объекты любых типов (классов) отображаются в списке с помощью метода ToString своего класса. Если в классе нет собственного метода ToString, действует унаследованный метод – обычно это метод ToString из класса Object, который возвращает строку с полным именем класса.
В списке объекты хранятся в первоначальном виде: значимые типы непосредственно копируются в список, а для ссылочных в список помещается только ссылка на объект.
Метод Add добавляет элементы в конец списка.
Для программного доступа к выбранному в списке элементу используются свойства SelectedIndex (номер выбранного элемента) и SelectedItem(сам выбранный элемент, это свойство имеет тип Object).
Добавьте на форму еще одну кнопку (button2). Сделаем так, чтобы в результате щелчка по кнопке, в заголовке формы отображался выбранный элемент. Для этого напишем следующий обработчик:
private void button2_Click(object sender, EventArgs e)
{ if (listBox1.SelectedIndex != -1)
Text = Convert.ToString(listBox1.SelectedItem);
else
Text = "Элемент не выбран";
}
Здесь учтена ситуация, когда в списке ничего не выбрано. В этом случае свойство SelectedIndex равно -1.
Наконец, для взаимодействия с пользователем элемент ListBox обычно использует событие SelectedIndexChanged. Это событие происходит в любом случае изменения номера выбранного элемента:
- в случае выбора пользователем элемента списка мышью;
- в случае выбора пользователем элемента списка клавиатурой;
- изменение значения свойства SelectedIndex программным путем.
Рассмотрим следующий пример обработчика этого события:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{ if ((listBox1.SelectedIndex < 5) &&
(listBox1.SelectedIndex < listBox1.Items.Count-1))
listBox1.SelectedIndex++;
}
Если пользователь выбирает мышью некоторый элемент в списке, возникает первое событие SelectedIndexChanged. Далее при выполнении условия оператора if осуществляется программное увеличение свойства SelectedIndex. Это в свою очередь приводит к возникновению второго события SelectedIndexChanged, его обработке и т.д. Этот процесс останавливается благодаря условию if либо на пятом элементе списка, либо в конце списка.
Далее приводятся другие популярные средства управления коллекцией Items:
public int Count
Свойство, позволяющее узнать количество элементов в коллекции
public void AddRange (Object[] items)
Добавление в коллекцию массива объектов
public void AddRange (ObjectCollection value)
Добавление в коллекцию содержимого другого списка
public virtual void Clear ()
Очистка содержимого коллекции
public bool Contains (Object value)
Определяет, найден ли данный объект в коллекции
public int IndexOf (Object value)
Определяет позицию данного элемента в коллекции (-1, если не найден)
public void Insert (int index,Object item)
Добавляет данный объект в коллекцию в указанную позицию
public void Remove (Object value)
Удаляет данный элемент из коллекции
public void RemoveAt (int index)
Удаляет из коллекции объект в указанной позиции
Этот перечень еще раз подтверждает сходство коллекции Items с объектами ArrayList. Естественно, коллекцию Items можно индексировать.
