
- •Часть 2. Сборник рецептов по визуальному программированию Введение в объектно-ориентированное программирование
- •Создание проекта в VisualStudio
- •Файлы проекта
- •Сведения об объекте
- •Общие свойства всех объектов
- •Класс Form
- •Помещение компонента в форму и прочие действия с дизайнером форм
- •Свойства форм
- •События формы
- •Методы формы
- •Компоненты ввода и отображения текстовой информации Компонент Label
- •Некоторые свойства компонента Label
- •Компонент TextBox
- •Методы TextBox
- •Компонент RichTextBox
- •Ввод числовых значений в компонент TextBox
- •Проверка, введены ли значения
- •Компонент ListBox
- •Компонент ComboBox
- •Ввод данных из файла
- •Компонент MaskedTextBox
- •Кнопки, индикаторы и управляющие элементы Компонент Button
- •Компонент Panel
- •Компоненты RadioButtonиCheckBox
- •Компонент GroupBox
- •Пример. Комплектация автомобиля
- •Работа с меню Главное меню
- •Контекстное меню
- •Создание текстового редактора
- •Системные диалоги
- •Компонент OpenFileDialog
- •Компонент SaveFileDialog
- •Диалог выбора шрифта
- •Диалог выбора цвета
- •Компонент PrintDialog
- •Диалоговые окна в текстовом редакторе
- •Расширенные символы Unicode
- •Работа с графикой Использование графических файлов
- •Создание фотоальбома
- •Методы для рисования на форме и прочих компонентах
- •Работа с таймером
- •Работа с датой и временем
- •Добавление новых форм к проекту
- •Многостраничные панели
- •Способы задания страниц
- •Методы TabControl
Компонент ListBox
Компонент находится в списке Common Controls палитры компонентов. Этот компонент выводит список элементов, из которых пользователь может выбрать как один, так и несколько элементов.
Если количество элементов превосходит размеры окна, то в компоненте автоматически появляется полоса прокрутки.
Свойство SelectedIndexвозвращает целочисленное значение, которое соответствует первому элементу в списке выбранных. Если выборка оказалась пустой, то значение этого свойства устанавливается в –1. Значение индекса в списке изменяется с нуля. При многострочной выборке это свойство возвращает индекс первого элемента из списка выборки.
Свойство SelectedItemвозвращает выбранный элемент. Обычно это текстовая строка.
Количество элементов в списке сообщается в свойстве Count, значение которого всегда на единицу больше индекса последней строки списка, потому что список отсчитывается от нуля.
Рассмотрим еще некоторые свойства компонента.
ColumnWidthзадает ширину колонки при использовании многоколоночного списка.
DataSourceзадает источник данных, с помощью которого можно заполнять список. Существует два способа заполнения:
использовать метод Add(), в этом случае свойствоDataSourceдолжно быть отключено;
подключаться к различным источникам данных, доступ к которым формируется через диалоговое окно, открывающееся кнопкой, расположенной в поле этого свойства.
Items– это элементы компонента, которые можно не только просматривать, но и изменять. Для задания списка строк-элементов надо щелкнуть на кнопке с многоточием в поле этого свойства, чтобы открылось окно редактора, позволяющего вводить и редактировать строки.
Извлечь строки из компонента можно так:
String ^it=ListBox1->Items[i]->ToString();
где i– номер строки (отсчет начинается с нуля).
Для того чтобы обнаружить строку, на которой был щелчок мыши (обработка события Click) можно так:
String ^it=this->ListBox1->Items[this->ListBox1-> ->SelectedIndex]->ToString();
MultiColumnобеспечивает компоненту работу в многоколоночном режиме (т.е. набор строк, не помещающийся в окно, будет размещаться в новых колонках).
Если свойство ScrollAlwaysVisibleустановлено вtrue, то полоса прокрутки появляется независимо от количества элементов.
Свойство SelectionModeзадает, сколько элементов выбирается за один раз.
Для добавления и удаления строк из списка используются методы:
Add(str)– добавить элемент в конец списка;
Insert(i,str)– вставить элемент внутрь списка;
Clear()– удалить все элементы из списка;
Remove(str)– удалить заданный элемент из списка;
RemoveAt(i)– удалить строку, индекс которой указан в аргументе.
Например, для добавления элемента в список необходимо написать:
ListBox1->Items->Add(“Строка!!!”);
Например, если в обработчик какого-либо события поместить следующие операторы
ListBox1->Items->Clear();
ListBox1->Items->Add(“Строка номер 1”);
ListBox1->Items->Add(“Строка номер 2”);
ListBox1->Items->Insert(1,“Привет!”);
получим следующий результат:
Строка номер 1
Привет!
Строка номер 2
Компонент ComboBox
Компонент находится в списке Common Controlsи представляет собой комбинацию редактируемого поляTextBoxи спискаListBox: в форме он представляется в виде редактируемого поля с треугольной кнопкой справа.
Компонент используется для вывода данных в виде выпадающего списка и последующей выборки их из этого списка. По умолчанию компонент появляется в виде окна для ввода/вывода текста, при этом выпадающий список скрыт.
Многие свойства этого компонента совпадают со свойствами ListBoxиTextBox, например,Text,Items,SelectedIndexи др.
Пример
Модифицируем программу «АЗС» следующим образом. Вместо ввода стоимости бензина, организуем компонент ComboBox, в котором будем из списка выбирать тип топлива: газ, дизель, АИ-92, АИ-96. Соответствующая каждому из видов топлива цена будет задаваться непосредственно в тексте программы, и пользователь изменить ее не сможет.
Поместим на форму компонент ComboBoxи назовем егоTip. Настройку этого компонента будет выполнять конструктор формы. Таким образом, в соответствующей функцииForm1(void){…}запишем:
InitializeComponent();
Tip->Items->Add(“Газ”);
Tip->Items->Add(“Дизель”);
Tip->Items->Add(“АИ-92”);
Tip->Items->Add(“АИ-96”);
По умолчанию считаем, что выбран третий элемент, поэтому
Tip->SelectedIndex=2;
Далее модифицируем обработчик события Clickдля кнопки «Рассчитать». Теперь мы не вводим цену топлива, поэтому необходимо написать код, позволяющий сопоставить тип топлива и его цену. Это делается с помощью оператора выбора по номеру выбранной строки.
switch (Tip->SelectedIndex){
case 0: l=10.50; break; //газ
case 1: l=12.20; break; //дизель
case 2: l=21.40; break; //АИ-92
case 3: l=22.80; break; //АИ-96
default: l=1000; //Неизвестный тип топлива
}
Далее расчет производится по приведенной в предыдущем примере формуле. Единственное, следует осуществить проверку, выбран ли тип топлива, или пользователь ввел некое значение:
if (l!=1000){
v=Convert::ToDouble(vol->Text);
double s=l*v;
...
}else{
MessageBox::Show("На нашей АЗС такого топлива нет! Выберите топливо из списка!", "Бензиновый калькулятор", MessageBoxButtons::OK, MessageBoxIcon::Asterisk);
tip->Focus();
}
Если пользователь выбрал элемент, не присутствующий в списке, можно написать обработчик события SelectedIndexChanged, в котором, например, осуществить очистку компонентов, в которых выводится результат.