Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lesson_6_7_new.doc
Скачиваний:
3
Добавлен:
28.09.2019
Размер:
167.42 Кб
Скачать

9

Создание окна диалога

У вас более одного управляющего элемента в окне диалога, которые Вы можете использовать, чтобы ввести граничные значения. Можно использовать управляющий элемент ListBox, чтобы пользователь мог выбрать из списка возможных значений. Вы должны добавить два элемента Label в форму окна диалога с двумя элементами ListBox рядом, как показано на рисунке 21.

Рисунок 21

Select lower limit value

Select upper limit value

Свойство Name для списков будет lottoLowerList и lottoUpperList для нижней и верхней границ. Измените размеры элемента ListBox, чтобы он был такой же высоты как элемент Label; ширина должна быть достаточной для вывода значения предела. Измените также свойство размер (Size) шрифта на 10 и свойство ScrollAlwaysVisible установите в True. Удостоверьтесь, что значение свойства SelectionMode равно единице для обоих списков, поскольку разрешается выбирать только один пункт из списка.

Разработка графического интерфейса пользователя (GUI) для окна диалога завершена, но чтобы функционирование отвечало вашим требованиям, необходимо вернуться в окно с кодом. Можно начать с кода, который определяет граничные значения для списков ListBox.

Добавление Списка к ListBox

Список, которым ListBox управляет - это набор объектов, которые хранятся как handle типа Object ^, таким образом, любой вид объекта может быть сохранен в списке. В примере Вам нужно хранить набор значений пределов целого числа в каждом списке. В большинстве случаев можно положиться на autoboxing, чтобы преобразовать значения типа int к (и от) объектам типа Int32, когда необходимо.

Свойство Items для объекта ListBox возвращает ссылку на коллекцию объектов в списке. В этой коллекции есть метод Add(), который добавляет объект, который Вы передаете, как аргумент списку. Объект ListBox имеет большое количество свойств, включая свойство Enabled, которое имеет значение true, когда пользователь может взаимодействовать со списком, и false, когда взаимодействие запрещено.

Основной процесс загрузки списков тот же самый для обоих элементов ListBox. Таким образом, Вы можете закодировать private функцию-элемент класса LottoLimitsDialog, которая и предназначена для добавления диапазона целых чисел в список:

void SetList(ListBox^ listBox, int min, int max, int selected)

{

listBox->BeginUpdate(); // Suppress drawing the listbox

for(int n = min ; n <= max ; n++)

listBox->Items->Add(n);

listBox->EndUpdate(); // Resume drawing the list box

listBox->SelectedItem = Int32(selected);

}

Аргументы функции SetList () - это элемент listbox, для которого нужно добавить список, минимальное и максимальное целые числа в диапазоне, который будет добавлен, и целое число, которое должно быть выбрано в списке.

Функция добавляет целые числа от минимального до максимального, включительно, в список, используя функцию Add () для объекта коллекция, который возвращается свойством Item для объекта ListBox. Функция также устанавливает выбранное значение, которое первоначально отображается в списке, когда список показывается, с помощью свойства SelectedItem для элемента Listbox.

Когда пользователь выбирает диапазон в окне диалога, вам нужно куда-нибудь поместить это значение так, чтобы это значение было доступно для функции, принадлежащей объекту Form1. Обработчику события для пунктов меню нужно восстанавливать предельное значение и хранить в объекте Form1.

Один из способов сделать это - добавить несколько private элементов к классу LottoLimitsDialog, чтобы хранить верхний и нижний пределы значений и затем public свойства к классу, чтобы значения были доступными извне.

Добавление следующего кода к определению класса LottoLimitsDialog делает это:

private:

int lowerLimit; // Lower limit from control

int upperLimit; // upper limit from control

public:

property int LowerLimit // Property accessing lower limit

{

int get() {

return lowerLimit; }

void set(int limit)

{

lowerLimit = limit;

lottoLowerList->SelectedItem = Int32(limit);

}

}

property int UpperLimit // Property accessing upper limit

{

int get(){ return upperLimit; }

void set(int limit)

{

upperLimit = limit;

lottoUpperList->SelectedItem = Int32(limit);

}

}

Вам необходимо иметь возможность модифицировать свойства, потому что обработчик события Click для пункта меню Limits > Reset изменяет пределы, а Вы хотите, чтобы объекты ListBox имели пределы независимо от того, какие текущие верхний или нижний предел выбраны. Так же как хранение значения в объекте класса, Вы также модернизируете объекты ListBox так, чтобы они отображали новые пределы.

Теперь вы можете создать две public функции-элемента в классе LottoLimitsDialog, которые настраивают два управляющих элемента ListBox:

public:

void SetLowerLimitsList(int min, int max, int selected)

{

SetList(lottoLowerList, min, max, selected);

lowerLimit = selected;

}

void SetUpperLimitsList(int min, int max, int selected)

{

SetList(lottoUpperList, min, max, selected);

upperLimit = selected;

}

Каждая функция использует функцию SetList() для установления диапазона значений в соответствующий объект ListBox и затем устанавливает выбранное значение в элементе для хранения предела.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]