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

Загрузка 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