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

19

Подтверждение ввода

Разность между верхним и нижним пределами, которые пользователь выбирает, должна быть больше или равняться 5, так как необходимо 6 уникальных значений для ввода. Вы можете изменить обработчик события Click для кнопки Ok:

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

{

int upper = 0;

int lower = 0;

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

if (lottoUpperList->SelectedItem != nullptr)

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

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

if(lottoLowerList->SelectedItem != nullptr)

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

if(upper - lower < 5)

{

MessageBox::Show(L”Upper limit: “ + upper + L” Lower limit: “ + lower +

L”\nUpper limit must be at least 5 greater that the lower limit.” +

L”\nTry Again.”,

L”Limits Invalid”,

MessageBoxButtons::OK,

MessageBoxIcon::Error);

DialogResult = ::DialogResult::None;

}

else

{

upperLimit = upper;

lowerLimit = lower;

}

}

Теперь функция сохраняет значения, выбранные в объектах ListBox в локальных переменных lower и upper. Если значения отличаются меньше чем 5, выводится окно сообщение и закрывающееся диалоговое окно устанавливает свойство DialogResult в None.

Статическая функция Show() класса MessageBox выводит окно сообщения, которое настроено аргументами функции. Эта версия функции Show(), используемая здесь, принимает четыре аргумента следующим образом:

Тип параметра

Описание

String^

Текст, который будет показан в окне сообщения.

String^

Текст, который появится в заголовке окна сообщения

MessageBoxButtons

Перечисляемые константы, специфицирующие кнопки, которые появятся в окне сообщения. Значения могут быть следующими: OK, OKCancel, YesNo, YesNoCancel, RetryCancel, AbortRetryIgnore

MessageBoxIcon

Перечисляемые константы, специфицирующие иконки, которые появятся в сообщении. Задаются следующие значения:

Asterisk (Звездочка), Exclamation (Восклицательный знак), Error (Ошибка), Hand, Information (Информация), None, Question (Вопрос), Stop (Стоп), Warning (Предупреждение)

Имеется несколько перегруженных версий статической функции Show() от очень простой с единственным параметром типа String^ до гораздо более сложных, имеющих до 10 параметров. Если Вы откомпилируете и выполните пример и установите пределы неверно, то увидите окно, подобное приведенному на рисунке 22:

Рисунок 22

Круглая красная иконка с белым крестом была определена четвертым аргументом функции Show(), и единственная кнопка OK - результат третьего аргумента.

Функция Show(), которую Вы вызываете, чтобы вывести окно сообщения, возвращает значение типа DialogResult, которая указывает, какая кнопка использовалась, чтобы закрыть окно сообщения. Вы можете использовать это возвращаемое значение, чтобы решить, что сделать после закрытия окна сообщения.

В обработчике lottoOK_Click() для кнопки OK в диалоговом окне для установки пределов, Вы можете решить, закрывать или нет диалоговое окно, используя значения, возвращаемые функцией Show() для окна сообщения:

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

{

int upper = 0;

int lower = 0;

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

if(lottoUpperList->SelectedItem != nullptr)

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

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

if(lottoLowerList->SelectedItem != nullptr)

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

if(upper - lower < 5)

{

::DialogResult result =

MessageBox::Show(L”Upper limit: “ + upper + L” Lower limit: “ + lower +

L”\nUpper limit must be at least 5 greater that the lower limit.” +

L”\nTry Again.”,

L”Limits Invalid”,

MessageBoxButtons::OKCancel,

MessageBoxIcon::Error);

if(result == ::DialogResult::OK)

DialogResult = ::DialogResult::None;

else

DialogResult = ::DialogResult::Cancel;

}

else

{

upperLimit = upper;

lowerLimit = lower;

}

}

Поскольку третий аргумент функции Show() - MessageBoxButtons:: OKCancel, в сообщении теперь будет две кнопки как показано на рисунке 23.

Рисунок 23

В обработчике события Click для кнопки OK в диалоговом окне для установки пределов Вы храните возвращаемое значение функции Show(). Тип результата должен быть определен. Иначе, он интерпретируется компилятором как свойство DialogResult для объекта lottoLimitsDialog, и код не компилируется. Если результат содержит значение ::DialogResult::Ok, Вы устанавливаете свойство DialogResult для объекта lottoLimitsDialog в ::DialogResult::None, что предотвращает закрытие диалогового окна и позволяет изменить пределы.

Если Вы устанавливаете свойство DialogResult для диалога в ::Dialog::Cancel - это имеет тот же самый эффект как щелчок кнопкой Cancel для диалогового окна.

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