Шаг 158.
Microsoft Visual C++ 2010. Язык С/С++.
Компоненты Windows Forms. Как использовать ListBox. Загрузка данных из файла

    На этом шаге мы рассмотрим пример использования компонента ListBox.

    Так как в данной версии отключена возможность получения данных из базы данных, посредством использования свойства DataSource компонента ListBox, рассмотрим пример, в котором данные будем получать из файла.

    Создадим функцию, которая станет загружать текстовые строки из обыкновенного текстового файла, подготовленного известным и простейшим инструментом - программой Блокнот или программой Word.

    После создания такой программы применим ее для загрузки строк и попробуем вывести (по щелчку мыши на строке) отмеченную строку в компонент TextBox. Вид приложения в режиме дизайна показан на рисунке 1, результат работы приложения приведен на рисунке 2.


Рис.1. Приложение, загружающее текстовый файл в ListBox и организующее выборку строк из ListBox и копирование их в TextBox


Рис.2. Загрузка текстового файла в ListBox, выборка строк из ListBox и копирование их в TextBox

    Текст приложения.

.   .   .   .
#include <stdio.h>
namespace My158_1 {
.   .   .   .
	private:
		/// <summary>
		// функция: загружает из файла текстовые строки в ListBox 
		void LoadFromFile(char *File, ListBox ^lb)
		{
			char s[300];
			FILE *fp;
			lb->Items->Clear();
			if (!(fp=fopen(File, "r")))
			{
				MessageBox::Show("Ошибка открытия файла", 
                                   "Работа с ListBox", 
				   MessageBoxButtons::OK, 
                                   MessageBoxIcon::Asterisk); 
				return;
			}
			fgets(s, 300, fp); 
			while(!feof(fp)) {
				String ^dd = gcnew String(s); 
				// этот способ конвертирования не удаляет последний 
				// управляющий символ, который надо удалить:
				int j = dd->Length-1; 
				dd = dd->Substring(0, j); 
				lb->Items->Add(dd);
				fgets(s,300,fp); 
			}
		}
		/// Требуется переменная конструктора.
		/// </summary>
.   .   .   .
// Обработчики событий
// Загрузка данных из файла в ListBox
private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
			 this->LoadFromFile("d:\\file.txt", this->listBox1);
	 }
// Выход из приложения
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
			 Close();
	 }
// Помещение строки в TextBox
private: System::Void listBox1_Click(System::Object^  sender, System::EventArgs^  e) {
	 textBox1->Text = 
            this->listBox1->Items[this->listBox1->SelectedIndex]->ToString();
	 }
Архив проекта можно взять здесь.

    Пояснение:

    Функция LoadFtomFile(Имя файла) встроена в описание формы, поэтому является членом класса Form1. Обращение к ней идет как к члену класса. В программе требуется конвертировать строку из типа char в строку типа String. Это делается оператором:

  String^ dd = gcnew String(s);

   

    На следующем шаге мы рассмотрим компонент ComboBox.




Предыдущий шаг Содержание Следующий шаг