На этом шаге мы рассмотрим назначение, основные свойства и пример использования этого компонента.
Компонент ListBox (рисунок 1) представляет собой список, в котором можно выбрать нужный элемент.
Рис.1. Компонент ListBox
Свойства компонента приведены в таблице 1.
Свойство | Описание |
---|---|
Items | Элементы списка - коллекция строк |
Items.Count | Количество элементов списка |
Items.SelectedIndex | Номер элемента, выбранного в списке. Если ни один из элементов списка не выбран, то значение свойства равно -1 |
Sorted | Признак необходимости автоматической сортировки (True) списка после добавления очередного элемента |
SelectionMode | Определяет режим выбора элементов списка: One - только один элемент; MultiSimple - можно выбрать несколько элементов, сделав щелчок на нужных элементах списка; MultiExtended - можно выбрать несколько элементов, сделав щелчок на нужных элементах списка при нажатой клавише Ctrl, или выделить диапазон, щелкнув при нажатой клавише Shift на первом и последнем элементе диапазона |
ScrollAlwaysVisible | Признак необходимости всегда отображать вертикальную полосу прокрутки. Если значение свойства равно False, то полоса прокрутки отображается, только если все элементы списка нельзя отобразить при заданном размере компонента |
MultiColumn | Признак необходимости отображать список в несколько колонок. Количество отображаемых колонок зависит от количества элементов и размера области отображения списка |
Location | Положение компонента на поверхности формы |
Size | Размер компонента без (для компонентов типа DropDown и DropDownList) или с учетом (для компонента типа Simple) размера области списка или области ввода |
Font | Шрифт, используемый для отображения содержимого поля редактирования и элементов списка |
Список, отображаемый в поле редактирования, можно сформировать во время создания формы или во время работы программы. Чтобы сформировать список во время создания формы, надо щелкнуть на кнопке с тремя точками в строке свойства Items и в окне String Collection Editor (Редактор коллекции строк) ввести элементы списка. Формирование списка во время работы программы обеспечивает метод Add свойства Items.
Программа "Просмотр иллюстраций" (вид ее окна приведен на рисунке 2) демонстрирует использование компонента ListBox.
Рис.2. Окно программы "Просмотр иллюстраций"
Программа позволяет просмотреть иллюстрации (фотографии), находящиеся в указанной пользователем папке.
Текст программы приведен в листинге ниже. Заполняет список компонента ListBox функция FillListBox. В начале работы программы эту функцию вызывает конструктор формы. Во время работы — функция обработки события Click на кнопке Папка. Сначала эта функция отображает диалог Выбор папки (отображение диалога обеспечивает метод ShowDialog объекта FolderBrowserDialog), затем — вызывает функцию FillListBox. Для доступа к папке используется объект DirectoryInfo. Список файлов представлен в виде массива типа FileInfo. Формирует массив метод GetFiles. Отображение иллюстраций обеспечивает компонент PictureBox. Чтобы иллюстрации отображались без искажения, его свойству SizeMode надо присвоить значение Zoom. Отображение выбранной в списке иллюстрации осуществляет функция обработки события SelectedIndexChanged, которое происходит в результате щелчка на элементе списка или перемещения указателя текущего элемента списка при помощи клавиш управления курсором.
Приведем описания переменных и тексты основных функций:
. . . . using namespace System::IO; // для DirectoryInfo . . . . // конструктор Form1(void) { InitializeComponent(); // //TODO: добавьте код конструктора // // Настройка listBox1: // элементы списка сортируются в алфавитном порядке listBox1->Sorted = true; // получить имя каталога "Мои рисунки" DirectoryInfo^ di; // каталог di = gcnew DirectoryInfo(Environment::GetFolderPath( Environment::SpecialFolder::MyPictures)); aPath = di->FullName; label1->Text = aPath; // Сформировать и отобразить в поле компонента listBox // список иллюстраций FillListBox(aPath); } . . . . private: String^ aPath; // путь к файлам картинок . . . . private: System::Boolean FillListBox(String^ aPath) { // информация о каталоге DirectoryInfo^ di = gcnew DirectoryInfo(aPath); // информация о файлах array<FileInfo^> ^fi = di->GetFiles("*.jpg"); // очистить список listBox1 listBox1->Items->Clear(); // Добавляем в listBox1 имена jpg-файлов, // содержащихся в каталоге aPath for each (FileInfo^ fc in fi) { listBox1->Items->Add(fc->Name); } label1->Text = aPath; if (fi->Length == 0) return false; else { // выбираем первый файл из полученного списка listBox1->SelectedIndex = 0; return true; } } // щелчок на кнопке Папка private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { // FolderBrowserDialog - окно Обзор папок FolderBrowserDialog^ fb = gcnew FolderBrowserDialog(); fb->Description = "Выберите папку,\n" + "в которой находятся иллюстрации"; fb->ShowNewFolderButton = false; fb->SelectedPath = aPath; // Отобразить окно Обзор папок и проверить, // щелчком на какой кнопке пользователь закрыл его if (fb->ShowDialog() == System::Windows::Forms::DialogResult::OK) { // пользователь выбрал каталог и щелкнул на кнопке OK aPath = fb->SelectedPath; label1->Text = aPath; if (!FillListBox(fb->SelectedPath)) // в каталоге нет файлов иллюстраций pictureBox1->Image = nullptr; } } // Пользователь выбрал другой элемент списка // щелчком кнопкой мыши или перемещением по списку // при помощи клавиатуры private: System::Void listBox1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) { pictureBox1->Visible = false; // загружаем изображение в pictureBox1 pictureBox1->Image = gcnew Bitmap(aPath + "\\" + listBox1->SelectedItem->ToString()); if ((pictureBox1->Image->Width > pictureBox1->Size.Width) || (pictureBox1->Image->Height > pictureBox1->Size.Height)) { // масштабируем pictureBox1->SizeMode = PictureBoxSizeMode::Zoom; } else { // масштабировать не надо pictureBox1->SizeMode = PictureBoxSizeMode::CenterImage; } pictureBox1->Visible = true; }
На следующем шаге мы рассмотрим компонент ListView.