На этом шаге мы рассмотрим пример использования компонента 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.