- •Лабораторная работа №4 работа со списками в windows-приложениях Работа со списками в ListBox
- •Операции над списками ListBox
- •Добавление строк в ListBox
- •Доступ к строкам в ListBox
- •Удаление пунктов из списка
- •Изменяем цвет и шрифт пунктов списка
- •Загрузка ListBox из файлов
- •Работа со списками в ComboBox Основные свойства ComboBox
- •Операции над списками в ComboBox Добавление строк в ComboBox
- •Доступ к строкам в ComboBox
- •Изменяем цвет пунктов списка
- •Загрузка ComboBox из файлов
- •Возможности выделения в ListBox и ComboBox
- •Особенности использования контрола CheckedListBox
- •Задание к лабораторной работе.
Работа со списками в 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.