- •Лабораторная работа №4 работа со списками в windows-приложениях Работа со списками в ListBox
- •Операции над списками ListBox
- •Добавление строк в ListBox
- •Доступ к строкам в ListBox
- •Удаление пунктов из списка
- •Изменяем цвет и шрифт пунктов списка
- •Загрузка ListBox из файлов
- •Работа со списками в ComboBox Основные свойства ComboBox
- •Операции над списками в ComboBox Добавление строк в ComboBox
- •Доступ к строкам в ComboBox
- •Изменяем цвет пунктов списка
- •Загрузка ComboBox из файлов
- •Возможности выделения в ListBox и ComboBox
- •Особенности использования контрола CheckedListBox
- •Задание к лабораторной работе.
Загрузка ListBox из файлов
Для работы с текстовыми файлами удобно использовать потоки и класс потоков, наследника класса Stream - Класс FileStream.
Класс FileStream используется для чтения и записи файлов. Его можно использовать для чтения и записи байтов, символов, строк и других типов данных. Класс FileStream поддерживает синхронное и асинхронное открытие файлов, синхронные операции чтения и записи (методы Read и Write), а также асинхронные операции чтения и записи (методы BeginRead и BeginWrite). Асинхронные операции завершаются вызовом методов EndRead и EndWrite соответственно. Режим по умолчанию - синхронный. Для проверки режима используемтсясвойство класса IsAsync. Для асинхронных операций необходим объект WaitHandle. Метод Seek используется для произвольного доступа к файлам. Свойство Position позволяет нам узнать или установить текущую позицию в потоке. Методы Lock и Unlock служат для предотвращения доступа ко всему файлу или к его части, а также для отмены ранее установленного запрета доступа. Свойство Length возвращает длину потока в байтах, а метод SetLength служит для задания длины потока. Методы ReadByte и WriteByte используются для чтения и записи одного байта. Для других примитивных типов необходимы классы BinaryReader и BinaryWriter соответственно.
Удобно использовать для работы с текстовыми файлами в дополнение к классу FileStream классы TextReader, TextWriter StreamReader, StreamWriter, StringReader и StringWriter.
Класс TextReader используется для чтения последовательности символов из ассоциированного потока. Этот класс служит основой для двух других классов: StreamReader и StringReader.
Класс TextReader содержит следующие методы:
Peek() - возвращает следующий символ из потока, но не перемещает указатель текущей позиции;
Read() или Read(Char(), Integer, Integer) - метод применяется для чтения указанного числа символов из потока;
ReadBlock(Char(), Integer, Integer) - метод считывает указанное число символов в буфер;
ReadLine() - считывает строку символов из потока;
ReadToEnd() - считывает все символы с текущей позиции до конца потока как одну строку.
Класс TextWriter служит для записи последовательности символов в поток.
Класс StreamReader применяется для чтения последовательности символов из файла или другого потока. Его можно использовать для чтения текстового файла построчно и как одну строку.
Класс StringReader позволяет выполнить чтение символов из строк. StreamReader и StringReader для чтения строки из текстового файла и чтения символов из этой строки как из потока:
Класс StreamWriter применяется для вывода последовательности символов в той или иной кодировке. По умолчанию используется экземпляр класса UTF8Encoding для записи символов в кодировке Unicode UTF-8. Существует несколько перегруженных конструкторов, позволяющих указать поток, кодировку по умолчанию, задать кодировку, размер буфера и тип операции: требуется перезаписать существующий файл или информация должна быть к нему добавлена. Свойство Flush служит для указания, следует ли записывать содержимое буфера в поток после каждого вызова методов Write и WriteLine.
Класс StringWriter используется для записи строки, которая хранится в классе StringBuilder, реализованном в пространстве имен System.Text.
Покажем возможные способы использования перечисленных классов для ввода и вывода информации в ListBox.
Проверим в заголовке наличие кода using System.IO и пишем в обработчике события нажатия кнопки 1 следующий код:
private void toolStripButton1_Click(object sender, EventArgs e)
{
string sStringText;
string sFileName="a.txt";
TextReader textreader = new StreamReader(sFileName);
listBox1.Items.Clear();
while(textreader.Peek() > -1)
{
sStringText=textreader.ReadLine();
listBox1.Items.Add(sStringText);
}
textreader.Close();
}
Для записи в файл можно воспользоваться следующим кодом:
private void toolStripButton2_Click(object sender, EventArgs e)
{
//Создаем поток для записи в файл и загружаем в него файл
//при отсутствии файла он будет создан
FileStream filestream =
new FileStream("a.txt",FileMode.OpenOrCreate,FileAccess.Write);
//Очищаем поток
filestream.SetLength(0);
//StreamWriter создаем для потока filestream
StreamWriter streamwriter = new StreamWriter(filestream);
//Записываем текст, из ListBoxBox1 в файл
for(int i=0; i < listBox1.Items.Count; i++)
{
streamwriter.WriteLine(listBox1.Items[i].ToString());
}
//Освобождаем ресурсы
streamwriter.Flush();
streamwriter.Close();
filestream.Close();
}