- •Лабораторная работа №4 работа со списками в windows-приложениях Работа со списками в ListBox
- •Операции над списками ListBox
- •Добавление строк в ListBox
- •Доступ к строкам в ListBox
- •Удаление пунктов из списка
- •Изменяем цвет и шрифт пунктов списка
- •Загрузка ListBox из файлов
- •Работа со списками в ComboBox Основные свойства ComboBox
- •Операции над списками в ComboBox Добавление строк в ComboBox
- •Доступ к строкам в ComboBox
- •Изменяем цвет пунктов списка
- •Загрузка ComboBox из файлов
- •Возможности выделения в ListBox и ComboBox
- •Особенности использования контрола CheckedListBox
- •Задание к лабораторной работе.
Операции над списками ListBox
На заготовку проекта добавим (если еще это не сделано) контрол ListBox, устанавливаем его размеры и свойства в соответствии с приведенным выше описанием. Свойство SelectionMode установим в MultiExtend, подберем размеры и приложение готово к экспериментам.
Основное свойство ListBox - свойство Items. Оно является коллекцией объектов типа строки, то есть свойство ListBox.Items имеет тип ListBox.ObjectCollection.
Добавление строк в ListBox
Для задания свойства Items на этапе разработки необходимо кликнуть на многоточии рядом с ним в окне Properties и, тем самым, вызвать String Collection Editor. В нем можно ввести необходимые тексты строк, которые после нажатия кнопки "OK" появятся в окне контрола.
Для добавления строк программно можно воспользоваться методом Add (уже использованном нами выше).
for(int i = 10; i > 0;i--)
{
listBox1.Items.Add(i.ToString());
}
Чтобы показать, как можно заносить в контрол данные из массива строк, приведем следующий код:
private void toolStripButton1_Click(object sender, EventArgs e)
{
string[] sArayItems = {"Отлично", "Хорошо",
"Удовлетворительно","Неудовлетворительно"};
listBox1.Items.Clear();
for (int i = 0;i < sArayItems.GetLength(0);i++)
{
//Метод Add
listBox1.Items.Add(sArayItems[i]);
}
}
В ListBox пункты добавляются после последнего элемента. Чтобы изменить порядок добавления пунктов можно воспользоваться методом ListBox.ObjectCollection Insert():
private void toolStripButton1_Click(object sender, EventArgs e)
{
string[] sArayItems = {"Отлично", "Хорошо",
"Удовлетворительно","Неудовлетворительно"};
listBox1.Items.Clear();
for (int i = 0;i < sArayItems.GetLength(0);i++)
{
//Метод Insert
listBox1.Items.Insert(0,sArayItems[i]);
}
}
В этом случае последовательность расположения пунктов изменилась на противоположную.
Метод Insert позволяет вставить новый пункт в любое место списка.
listBox1.Items.Insert(1,"Ни то ни се");
Если все пункты списка известны, то достаточно для их отображения выполнить следующий код использующий метод свойства Items AddRange:
listBox1.Items.AddRange(new object[] {"Отлично",
"Хорошо", "Удовлетворительно","Неудовлетворительно"});
Еще один способ добавления строк - через создание массива системных объектов:
private void toolStripButton1_Click(object sender, EventArgs e)
{
Object[] soItems = new Object[10];
for(int i = 0; i <= 9; i++)
{
soItems[i] = "Строка " + i;
}
listBox1.Items.AddRange(soItems);
}
И последний пример, с использованием свойства DataSource, однако следует помнить, что при использовании данного способа источник данных только отображается в контроле и, поэтому, удалить из контрола пункт не удастся:
string[] sGrade;
sGrade = new string[]{"Отлично", "Хорошо",
"Удовлетворительно","Неудовлетворительно"};
listBox1.DataSource = sGrade;
//Эта строка даст исключение
//listBox1.Items.Clear();
Доступ к строкам в ListBox
Для показа доступа к строкам запишем в код обработчика для кнопки 2 следующий код:
private void toolStripButton2_Click(object sender, EventArgs e)
{
if(listBox1.SelectedIndex != -1)
Text=listBox1.SelectedItem.ToString();
}
После нажатия кнопки 1, выделения мышкой любой из оценок и нажатия кнопки 2, текст пункта будет отображаться в заглавии формы.
Такого же эффекта можно достигнуть при использовании свойства Text:
private void toolStripButton2_Click(object sender, EventArgs e)
{
Text=listBox1.Text
//Можно и так
MessageBox.Show(listBox1.Text, "");
}
Это означает, что свойство Text хранит только содержимое текста выбранного пункта. Кроме того при выборе нескольких пунктов (Selection Mode MultiSimple или MultiExtendet) в свойстве Tеxt хранится текст только одного пункта - верхнего.
Для того чтобы получить номер выбранной строки списка, изменим обработчик кода нажатия кнопки 2 на следующий:
private void toolStripButton2_Click(object sender, EventArgs e)
{
if(listBox1.SelectedIndex != -1)
Text=listBox1.SelectedIndex.ToString();
}
При выполнении можем видеть в заголовке формы номера индексов.
Следующий код, демонстрирующий возможность использования свойства Items - Count, выведет в заголовок имена всех пунктов списка:
private void toolStripButton2_Click(object sender, EventArgs e)
{
Text="";
for(int i=0; i < listBox1.Items.Count; i++)
{
Text+=listBox1.Items[i].ToString()+" ";
}
}
Следующий код также показывает возможность извлечения текста строки, выбранной кликом мышки, с использованием обработчиков событий. Создадим обработчик события listBox1_MouseDown (напомним - вкладка Events окна Properties, двойной клик в поле события) и поместим в него следующий код:
private void listBox1_MouseDown(object sender,
System.Windows.Forms.MouseEventArgs e)
{
ListBox listbox=((ListBox)sender);
Point point = new Point(e.X,e.Y);
int index = listbox.IndexFromPoint(point);
if(index >= 0)
Text=listbox.Items[index].ToString();
}
Для определения индекса и действий над пунктом списка можно воспользоваться методом FindString, возвращающим индекс пункта с найденным текстом:
int index = listBox1.FindString("Удовлетворительно");
if(index != -1)
listBox1.SetSelected(index,true);