Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа 4.doc
Скачиваний:
32
Добавлен:
15.04.2015
Размер:
215.04 Кб
Скачать

Операции над списками 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);