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

Работа со списками в ComboBox Основные свойства ComboBox

Как и ранее, убираем из проекта коды всех обработчиков событий нажатия кнопок, все функции, относящиеся к ListBox, и сам контрол ListBox и помещаем на форму контрол ComboBox.

Рассмотрим его свойства (те, с которыми мы еще не встречались ранее).

Свойство DropDownStyle определяет интерфейс с пользователем (стиль и возможность доступа к текстовому полю ComboBox). При значении свойства DropDown получается выпадающий список с возможностью изменения текстового поля, при DropDownList - доступ к текстовому полю закрыт. При значении свойства Simple список постоянно открыт (естественно отсутствует кнопка раскрытия списка), а редактирование поля Text разрешено.

Программная смена DropDownStyle выглядит несколько иначе, чем простое присваивание значения:

comboBox1.DropDownStyle=ComboBoxStyle.DropDown;

comboBox1.DropDownStyle=ComboBoxStyle.DropDownList;

Свойство DropDownWidth определяет ширину раскрывающейся части поля со списком. DropDownWidth не может быть меньше, чем ширина ComboBox.

Других свойств, отличных от свойств контрола ListBox у ComboBox нет, но присутствуют все остальные его свойства. Это означает, что ComboBox – по существу тот же ListBox, но имеющий для свойства Text отдельное поле и имеющий возможность отображать пункты списка как выпадающие. Поэтому далее практически повторены уже используемые при рассмотрении контрола ListBox коды, в которых учтены лишь незначительные особенности ComboBox.

Операции над списками в ComboBox Добавление строк в ComboBox

Для задания свойства Items на этапе разработки необходимо кликнуть на многоточии рядом с ним в окне Properties и, тем самым, вызвать String Collection Editor. В нем можно ввести необходимые тексты строк, которые после нажатия кнопки "OK" появятся в окне контрола.

Для добавления строк программно можно воспользоваться одним из следующих методов:

1.

comboBox1.Sorted=true;

for(int i = 10; i > 0;i--)

{

listBox1.Items.Add(i.ToString());

}

2.

string[] sArayItems = {"Отлично", "Хорошо",

"Удовлетворительно","Неудовлетворительно"};

comboBox1.Items.Clear();

for(int i = 0;i < sArayItems.GetLength(0);i++)

{

comboBox1.Items.Add(sArayItems[i]);

}

3.

string[] sArayItems = {"Неудовлетворительно","Удовлетворительно",

"Хорошо","Отлично"};

comboBox1.Items.Clear();

for (int i = 0;i < sArayItems.GetLength(0);i++)

{

comboBox1.Items.Insert(0,sArayItems[i]);

}

4.

comboBox1.Items.AddRange(new object[] {"Отлично",

"Хорошо", "Удовлетворительно","Неудовлетворительно"});

5.

string[] sArrayItems;

sArrayItems = new string[]{"Отлично", "Хорошо",

"Удовлетворительно","Неудовлетворительно"};

comboBox1.DataSource = sArrayItems;

6.

private void toolStripButton1_Click(object sender, EventArgs e)

{

System.Object[] soItems = new System.Object[10];

for (int i = 0; i <= 9; i++)

{

soItems[i] = "Строка " + i;

}

comboBox1.Items.AddRange(soItems);

}

Доступ к строкам в ComboBox

Особенностью ComboBox, отличающей его от ListBox, является то, что выбранный текст визуально можно посмотреть в окошечке Text. В остальном отличия по доступу к пунктам списка между контролами нет. Напомним рассмотренные методы:

1.Получаем текст выбранного пункта

if(comboBox1.SelectedIndex != -1)

Text=comboBox1.SelectedItem.ToString();

2.

Text=comboBox1.Text

//Можно и так

MessageBox.Show(listBox1.Text, "");

3.Получаем индекс выбранного пункта

if(comboBox1.SelectedIndex != -1)

Text=comboBox1.SelectedIndex.ToString();

4.//Используя обработчики событий

private void comboBox1_MouseUp(object sender,

System.Windows.Forms.MouseEventArgs e)

{

ComboBox combobox=((ComboBox)sender);

int index = combobox.SelectedIndex;

if(index >= 0)

Text=combobox.Items[index].ToString();

}

Удаление пунктов из списка

Для удаления пунктов из списка воспользуемся одним из способов:

1.

try

{

comboBox1.Items.RemoveAt(0);

}

catch

{

}

2.

comboBox1.Items.Remove(comboBox1.SelectedItem);

3.

comboBox1.Items.Remove("Неудовлетворительно");

Следующий пример демонстрирует возможность множественного удаления повторяющихся строк в списке при использовании метода FindStringExact, который ищет указанную строку с указанного индекса или начала списка и, при нахождении, возвращает ее индекс.

//Добавляем в ComboBox несколько повторяющихся строк

private void toolStripButton1_Click(object sender, EventArgs e)

{

//Заглавие используем для индикации того что удалили

Text="";

string[] sArayItems =

{"Отлично", "Хорошо","Хорошо",

"Удовлетворительно","Неудовлетворительно","Неудовлетворительно"};

comboBox1.Items.Clear();

for (int i = 0;i < sArayItems.GetLength(0);i++)

{

comboBox1.Items.Add(sArayItems[i]);

}

}

//По клику мышки все пункты с одинаковым текстом удаляются

//а текст пункта переносится в свойство Text формы.

private void comboBox1_SelectedIndexChanged(object sender,

EventArgs e)

{

ComboBox combobox = (ComboBox) sender;

string sSelString = (string) combobox.SelectedItem;

int index = -1;

index = combobox.FindStringExact(sSelString);

while(index != -1)

{

combobox.Items.RemoveAt(index);

index = comboBox1.FindStringExact(sSelString,index);

}

Text = Text+ " " + sSelString;

}

Этот код можно использовать для выборки пунктов из списка в некоторый отобранный список, например в другой ListBox, ComboBox или TextBox.