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

Использование Окна Диалога

Вы открываете окно диалога с помощью кода для обработки события Click для пунктов меню Upper и Lower в меню Limits.

Чтобы вывести диалоговое окно как модальное, Вы вызываете функцию ShowDialog() для диалогового объекта. Вы можете передать обработчик в родительскую форму как аргумент функции ShowDialog(). Обработчик события Click будет выглядеть следующим образом:

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

{

if(lottoTab->Visible)

{

lottoLimitsDialog->SetLowerEnabled();

::DialogResult result = lottoLimitsDialog->ShowDialog(this);

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

{

// Update user limits from dialog properties

lottoUserMaximum = lottoLimitsDialog->UpperLimit;

lottoUserMinimum = lottoLimitsDialog->LowerLimit;

}

}

}

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

{

if(lottoTab->Visible)

{

lottoLimitsDialog->SetUpperEnabled();

::DialogResult result = lottoLimitsDialog->ShowDialog(this);

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

{

// Update user limits from dialog properties

lottoUserMaximum = lottoLimitsDialog->UpperLimit;

lottoUserMinimum = lottoLimitsDialog->LowerLimit;

}

}

}

Эти две функции работают одинаково; они вызывают функцию, чтобы установить состояния списков ListBox, а затем выводят окно диалога как модальное окно, вызывая функцию ShowDialog () для диалогового объекта.

Если Вы хотели показать диалоговое окно не как модальное, в этом случае Вы вызываете функцию Show().

Когда Вы вызываете функцию ShowDialog (), она не завершается до тех пор, пока окно диалога не закроется. Это означает, что код для изменения пределов не выполняется, пока новые пределы не будут зарегистрированы в окне диалога обработчиком события Click для кнопки lottoOK.

Если Вы выводите диалоговое окно как немодальное с помощью функции Show(), возврат из функции происходит немедленно. Таким образом, если Вам должны быть доступны данные, которые, возможно, были изменены в диалоговом окне, необходим другой способ. Добавление обработчика для события Closing для диалоговой формы - одна из возможностей; другой способ - передача данных с помощью обработчика кнопки, которая закрывает диалоговое окно.

Функция ShowDialog() возвращает значение перечисляемого типа DialogResult, и Вы храните его в локальной переменной result. Возвращаемое значение из функции ShowDialog() показывает, какая кнопка в диалогом окне была нажата, и если значение перечисляемой константы :: DialogResult:: Ok, это показывает, что была нажата кнопка OK. Таким образом, код в каждой функции-обработчике модернизирует поля lottoUserMaximum и LottoUserMinimum только тогда, когда кнопка OK использовалась, чтобы закрыть диалоговое окно.

Обратите внимание на использование :: оператора в спецификации типа :: DialogReult и в выражении :: DialogResult:: Ok. Данный оператор необходим в имени DialogResult, чтобы отличать имя глобальной переменной и такое же имя элемента класса Form1 .

Конечно, Вы могли получить доступ к свойствам DialogResult объекта lottoLimitsDialog и непосредственно. Например, Вы можете написать утверждение if следующим образом:

if(lottoLimitsDialog->DialogResult == ::DialogResult::OK)

{

// Update user limits from dialog properties

lottoUserMaximum = lottoLimitsDialog->UpperLimit;

lottoUserMinimum = lottoLimitsDialog->LowerLimit;

}

Прежняя версия лучше, потому что очевидно, что Вы проверяете значение, возвращаемое функцией ShowDialog ().

Полное множество констант, которые определяет перечисление DialogResult, следующие: Yes, No, OK, Cancel, Retry, Ignore, None

Ошибка 1 error C2039: DialogResult: не является членом "`global namespace'" f:\projects\ex2_01\ex2_01\Form1.h 691

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