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

Обработка событий нажатия кнопок диалога

Добавьте функцию-обработчик события Click для объекта “Кнопка OK”, таким образом, возвращаетесь к Designtab для формы LottoLimitsDialog, и дважды нажмите на кнопку OK для добавления скелета кода.

Нет необходимости добавлять обработчик для события Click кнопки Cancel. Эффект нажатия кнопки - закрыть окно диалога, и никаких дальнейших действий не требуется.

Обработчик события Click для кнопки OK может выглядеть следующим образом:

System::Void lottoOK_Click(System::Object^ sender, System::EventArgs^ e)

{

// If there’s a currently selected upper limit item, save it

if (lottoUpperList->SelectedItem != nullptr)

upperLimit = safe_cast<Int32>(lottoUpperList->SelectedItem);

// If there’s a currently selected lower limit item, save it

if(lottoLowerList->SelectedItem != nullptr)

lowerLimit = safe_cast<Int32>(lottoLowerList->SelectedItem);

}

Функция вначале хранит значение верхнего предела из объекта lottoUpperList ListBox в переменной-элементе, который вы добавили для этой цели. Свойство SelectedItem объекта ListBox делает текущий отобранный пункт доступным как обработчик типа Object ^, и код проверяет, что возвращаемое значение не null. Перед сохранением отобранного пункта Вы должны преобразовать его к типу Int32.

Автоматическое преобразование позаботится о преобразовании объекта в целое число. Следующий обработчик сохраняет значение нижнего предела из другого объекта ListBox тем же самым способом. Когда обработчик заканчивает выполнение, окно диалога автоматически закрывается.

Управление состоянием объектов ListBox

Один и тот же диалоговый объект используется для обработки события Click пунктов меню Limits > Upper и Limits > Lower, но Вы не хотите, чтобы оба списка изменялись в любом случае.

Для пункта меню Upper вы должны запретить выбор нижнего предела, а для пункта меню Lower должен быть запрещен верхний предел. Вы можете добавить несколько public функций-элементов к классу LottoLimitsDialog, чтобы сделать это возможным.

Вот функция для управления состоянием объектов ListBox для пункта меню Upper:

void SetUpperEnabled()

{

lottoUpperList->Enabled = true; // Enable upper list box

lottoLowerList->Enabled = false; // Disable lower list box

}

Вы устанавливаете свойство Enabled для объекта lottoUpperList в значение true, чтобы позволять пользователю взаимодействовать с ним. Установка свойства Enabled lottoLowerList в false делает его доступным только для чтения.

Для пункта меню Lower вы делаете обратное:

void SetLowerEnabled()

{

lottoUpperList->Enabled = false; // Disable upper list box

lottoLowerList->Enabled = true; // Enable lower list box

}

Вы проделали много работы, чтобы объект "Диалог" вел себя так, как вы хотите, но у Вас все еще нет объекта "Диалог". Объект "Окно приложения" позаботится об этом.

Создание объекта "Диалог"

Конструктор класса Form1 может создать объект "Диалог". Он также может инициализировать объекты ListBox в окне диалога.

Добавьте private элемент к классу Form1, который хранит обработчик для диалогового окна:

private: LottoLimitsDialog^ lottoLimitsDialog;

Добавьте следующие строки кода в тело конструктора Form1:

lottoLimitsDialog = gcnew LottoLimitsDialog;

lottoLimitsDialog->SetLowerLimitsList(1, lottoUpperLimit-lottoValuesCount+1, lottoUserMinimum);

lottoLimitsDialog->SetUpperLimitsList(lottoValuesCount, lottoUpperLimit,

lottoUserMaximum);

Этот код очень прост. Первый оператор создает объект "Диалог". Следующие два оператора вызывают функции, которые инициализируют списки в объектах ListBox.

Максимальное значение в ListBox, которое устанавливает нижний предел, рассчитывается так, чтобы можно было вводить требуемое количество чисел. Если максимальное значение - 49, а число значений на входе - 6, максимум для нижнего предела будет 44. Если число будет больше, Вы не сможете создать шесть различных значений.

Та же самая причина в минимальном значении верхнего предела; оно не может быть меньше, чем число значений на входе. Для списков ListBox для этой цели - значения lottoUserMinimum и lottoUserMaximum.

Поскольку Вы обращаетесь к LottoLimitsDialog в конструкторе класса Form1, необходимо добавить директиву #include в определении класса в Form1.h:

#include “LottoLimitsDialog.h”

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