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

Получение данных из диалоговых компонент

Вы получите значения пределов из компонент тем же самым способом, как вы это делали для первой закладки. Сначала вы можете добавить некоторые новые элементы-данные к EuroLimitsDialog классу, чтобы поддерживать значения пределов, определенных пользователем:

private:

int lowerValuesLimit;

int upperValuesLimit;

int lowerStarsLimit;

int upperStarsLimit;

Вы должны инициализировать следующие элементы в конструкторе класса:

EuroLimitsDialog(void)

:lowerValuesLimit(1)

,upperValuesLimit(50)

,lowerStarsLimit(1)

,upperStarsLimit(9)

{

InitializeComponent();

//

//TODO: Add the constructor code here

//

}

Вам также необходимо несколько дополнительных свойств (public), определяемых в классе диалога, чтобы сделать пределы доступными из

объекта окна приложения:

public:

property int LowerValuesLimit

{

int get() { return lowerValuesLimit; }

void set(int limit)

{

lowerValuesLimit = limit;

lowerValuesLimits->Value = limit; // Set as selected in NumericUpDown

}

}

property int UpperValuesLimit

{

int get() { return upperValuesLimit; }

void set(int limit)

{

upperValuesLimit = limit;

upperValuesLimits->Value = limit; // Set as selected in NumericUpDown

}

}

property int LowerStarsLimit

{

int get() { return lowerStarsLimit; }

void set(int limit)

{

lowerStarsLimit = limit;

lowerStarsLimits->SelectedItem = limit; // Set as selected in ComboBox

lowerStarsLimits->SelectedIndex = // Set index for selected item

lowerStarsLimits->FindString(limit.ToString());

}

}

property int UpperStarsLimit

{

int get() { return upperStarsLimit; }

void set(int limit)

{

upperStarsLimit = limit;

upperStarsLimits->SelectedItem = limit; // Set as selected in ComboBox

upperStarsLimits->SelectedIndex = // Set index for selected item

upperStarsLimits->FindString(limit.ToString());

}

}

Функция get() для каждого свойства возвращает значение соответствующего private элемента, класса диалога. Функция set() устанавливает значение элемента данных и также модернизирует компоненту в окне диалога так, чтобы установленное значение становится выбранным.

Значение свойства SelectedIndex - индекс отобранного пункта. Вы устанавливаете его, используя функцию FindString() для компоненты ComboBox, которая возвращает значение индекса для первого появления аргумента в коллекции пунктов.

Значение в этой позиции показывается первоначально в компоненте.

Добавьте обработчик события Click для кнопки OK в EuroLimitsDialog классе, двойным нажатием на кнопку в окне Design.

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

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

{

::DialogResult result;

// get the limits for values

int valuesLower = Decimal::ToInt32(lowerValuesLimits->Value);

int valuesUpper = Decimal::ToInt32(upperValuesLimits->Value);

if(valuesUpper - valuesLower < 4) // Check for an adequate range

{

result = MessageBox::Show(this, // Range insufficient so

“Upper values limit: “+valuesUpper + // display message box

“ Lower values limit: “+ valuesLower+

“\nUpper values limit must be at least 4 greater that the lower limit.”+

“\nTry Again.”,

“Limits Invalid”,

MessageBoxButtons::OKCancel,

MessageBoxIcon::Error);

if(result == ::DialogResult::OK) // If message box OK clicked

DialogResult = ::DialogResult::None; // prevent dialog from closing

else // Messag box Cancel clicked

DialogResult = ::DialogResult::Cancel; // so close the dialog

return;

}

// Get stars limits

int starsLower = lowerStarsLimits->SelectedItem == nullptr ?

lowerStarsLimit :

Int32::Parse(lowerStarsLimits->SelectedItem->ToString());

int starsUpper = upperStarsLimits->SelectedItem == nullptr ?

upperStarsLimit :

Int32::Parse(upperStarsLimits->SelectedItem->ToString());

if(starsUpper - starsLower < 1) // Check for an adequate range

{

result = MessageBox::Show(this, // Range insufficient so

“Upper stars limit: “+starsUpper + // so display message box

“ Lower stars limit: “+ starsLower+

“\nUpper stars limit must be at least 1 greater that the lower limit.”+

“\nTry Again.”,

“Limits Invalid”,

MessageBoxButtons::OKCancel,

MessageBoxIcon::Error);

if(result == ::DialogResult::OK) // If message box OK clicked

DialogResult = ::DialogResult::None; // prevent dialog from closing

else // Message box Cancel clicked

DialogResult = ::DialogResult::Cancel; // so close the dialog

}

// Store the new limits

lowerValuesLimit = valuesLower;

upperValuesLimit = valuesUpper;

lowerStarsLimit = starsLower;

upperStarsLimit = starsUpper;

}

Свойство Value для компоненты NumericUpDown возвращает значение типа Decimal (Десятичное число). Чтобы преобразовывать его к типу Int32, Вы передаете как аргумент в статическую фнкцию ToInt32 () в классе Decimal.

Значение, которое эта функция возвращает, автоматически преобразуется так, чтобы это значение может храниться в переменной типа int.

Значение, возвращаемое свойством SelectedItem компоненты ComboBox, имеет тип Object ^. Если проверяемое значение NULL ( является пустым), Вы устанавливаете локальную переменную в текущее значение, зарегистрированное в диалоговом объекте; если значение не пусто, Вы сохраняте значение, представленное свойством SelectedItem.

Вы не можете хранить значение непосредственно, но при вызове функции ToString () для объекта производится преобразование в строку, которую Вы можете конвертировать в тип int, используя статическую функция Parse () в классе Int32.

Вам необходим private-элемент класса Form1, в котором будет храниться обработчик для нового окна диалога.

private:

EuroLimitsDialog^ euroLimitsDialog; // Dialog to set Euromillions limits

Вы можете добавить следующие операторы до конца кода в конструктор класса Form1, чтобы создать диалоговый объект и модернизировать свойства для значений пределов:

euroLimitsDialog = gcnew EuroLimitsDialog;

euroLimitsDialog->LowerStarsLimit = euroStarsLowerLimit;

euroLimitsDialog->UpperStarsLimit = euroStarsUpperLimit;

Установив свойства LowerStarsLimit и UpperStarsLimit для объекта Диалог, Вы убеждаетесь в том, что в компоненте ComboBox высвечиваются именно эти значения, когда диалоговое окно первоначально появляется. Если нет никакого выбранного пункта для компоненты ComboBox, то первоначально ничего не выводится.

Не забудьте добавить директиву #include для определения класса EuroLimitsDialog в Form1.h:

#include “EuroLimitsDialog.h”

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