- •Лабораторная работа №4 работа со списками в windows-приложениях Работа со списками в ListBox
- •Операции над списками ListBox
- •Добавление строк в ListBox
- •Доступ к строкам в ListBox
- •Удаление пунктов из списка
- •Изменяем цвет и шрифт пунктов списка
- •Загрузка ListBox из файлов
- •Работа со списками в ComboBox Основные свойства ComboBox
- •Операции над списками в ComboBox Добавление строк в ComboBox
- •Доступ к строкам в ComboBox
- •Изменяем цвет пунктов списка
- •Загрузка ComboBox из файлов
- •Возможности выделения в ListBox и ComboBox
- •Особенности использования контрола CheckedListBox
- •Задание к лабораторной работе.
Загрузка ComboBox из файлов
Ряд возможностей по загрузке списков из файлов и их сохранению в файлах были рассмотрены ранее (они полностью подходят и для ComboBox). Рассмотрим несколько других возможностей.
Как и ранее создадим список (используем все тоже решение и, как и ранее, только меняем коды обработчиков событий):
//Загружаем список
private void toolStripButton1_Click(object sender, EventArgs e)
{
string[] sArayItems = {"Отлично", "Хорошо",
"Удовлетворительно","Неудовлетворительно"};
comboBox1.Items.Clear();
for (int i = 0;i < sArayItems.GetLength(0);i++)
{
comboBox1.Items.Add(sArayItems[i]);
}
}
Запишем созданный список в файл (не забудем включить в заголовок код using System.IO;) непосредственно используя StreamWriter.
private void toolStripButton1_Click(object sender, EventArgs e)
{
StreamWriter streamWrite = File.AppendText("a.txt");
for(int count = 0; count < comboBox1.Items.Count; count++)
{
comboBox1.SelectedIndex = count;
streamWrite.WriteLine(comboBox1.SelectedItem.ToString());
}
streamWrite.Close();
}
В директории ....\bin\debug\ будет создан файл a.txt в который загружены строки созданного списка.
Для того чтобы в этом убедиться и показать возможность загрузки пунктов списка из файла, допишем код обработчика нажатия кнопки 2:
comboBox1.Items.Clear();
//В ComboBox ничего нет, создаем StreamReader
StreamReader streamreader = new StreamReader("a.txt");
String item;
while ((item = streamreader.ReadLine()) != null)
{
comboBox1.Items.Add(item);
}
streamreader.Close();
После реализации решения список будет загружен из файла, причем в окно Text будет выведен последний пункт списка.
Возможности выделения в ListBox и ComboBox
При всей схожести свойств контролов, возможности выделения части текста пункта в них несколько различны. Это различие основано на том, что у ListBox нет свойств SelectionStart и SelectionLength. Рассмотрим пример загрузки контролов и програмной cелекции (естественно, добавив в проект решения контрол ListBox):
//Загружаем пункты в контролы обычным образом
private void toolStripButton1_Click(object sender, EventArgs e)
{
string[] sArayItems = {"Отлично", "Хорошо",
"Удовлетворительно","Неудовлетворительно"};
comboBox1.Items.Clear();
for (int i = 0;i < sArayItems.GetLength(0);i++)
{
comboBox1.Items.Add(sArayItems[i]);
}
listBox1.Items.Clear();
for (int i = 0;i < sArayItems.GetLength(0);i++)
{
listBox1.Items.Add(sArayItems[i]);
}
}
//Показываем возможности программной селекции текста
private void toolStripButton1_Click(object sender, EventArgs e)
{
//Это возможно для ComboBox
comboBox1.SelectedIndex = 1;
comboBox1.SelectionStart = 0;
comboBox1.SelectionLength = 3;
//И только это возможно для ListBox
listBox1.SelectedIndex = 1;
}
Результат выполнения этого кода представлен на Рис. 5.
Рис.5. Возможности программной селекции в ComboBox и ListBox
Особенности использования контрола CheckedListBox
Контрол CheckedListBox по набору свойств почти полностью соответствует ListBox. Среди уникальных свойств (которых нет у ListBox):
Свойство ChekOnClick при значении true разрешает выбор пункта списка и пометку его галочкой.
Свойство ThreeDCheckBoxes позволяет менять внешний вид окошечек для пометки с плоского на утопленный.
Других отличительных от ListBox свойств, отображенных в окне Properties у CheckedListBox нет. Все это говорит о том, что принципы работы со списками у них одни и те же, одни и те же и методы. И, естественно, у CheckedListBox есть свойства для хранения информации о помеченных пунктах списка.
Так у CheckedListBox есть метод GetItemCheckState(), позволяющий определить помечен ли пункт списка. Следующий код выведет в свойство Text окна "Checked" если пункт первый списка помечен галочкой и "Unchecked" в противном случае.
Text=checkedListBox1.GetItemCheckState(0).ToString();
Заметим, что, как и ранее, перед проверкой стояния флажка методом GetItemCheckState() можно определить индекс конкретного пункта, например:
checkedListBox1.Items.IndexOf("Удовлетворительно");
Вся совокупность индексов помеченных пунктов хранится в свойстве CheckedIndices, как коллекция (совокупность чисел, начинающихся с 0) и, проверяя наличие номера индекса в коллекции, можно определить, помечен ли тот или иной пункт. Для демонстрации использования этого свойства вновь преобразуем проект решения. Убираем из проекта коды всех обработчиков событий нажатия кнопок, все функции, относящиеся к ListBox и ComboBox, и сами эти контролы и помещаем на форму контрол CheckedListBox. В обработчик нажатия кнопки 1 пишем код заполнения списка:
private void toolStripButton1_Click(object sender, EventArgs e)
{
checkedListBox1.Items.Clear();
string[] sArayItems = {"Отлично", "Хорошо",
"Удовлетворительно","Неудовлетворительно"};
checkedListBox1.Items.Clear();
for (int i = 0;i < sArayItems.GetLength(0);i++)
{
checkedListBox1.Items.Add(sArayItems[i]);
}
}
Следующий код выведет в свойство Text номера всех помеченных пунктов, как показано на Рис. 6.
private void toolStripButton2_Click(object sender, EventArgs e)
{
Text="";
//Переменная index, должна быть определена в функции foreach
foreach(int index in checkedListBox1.CheckedIndices)
{
Text+=index.ToString()+" ";
}
}
Рис.6. Определение помеченных индексов в СheckedListBox
Свойство CheckedItems также является коллекцией помеченных пунктов, но не их номеров, а названий в виде объектов типа строка. Следующий код выведет в свойство Text формы уже не номера пунктов, а их текст (Рис. 7.):
private void button2_Click(object sender, EventArgs e)
{
Text="";
foreach(object itemstring in checkedListBox1.CheckedItems)
{
Text+=itemstring.ToString()+" ";
}
}
Рис.7. Определение текста помеченных индексов в СheckedListBox