Отключение входного контроля
Когда выбран пункт меню Limits> Upper, Вам нужно предотвратить ввод нижнего предела, а когда пункт меню Limits > Lower выбран, Вам нужно запретить ввод значения для верхнего предела.
Вы можете добавить несколько функций-элементов к классу EuroLimitsDialog, чтобы реализовать это:
public:
// Disables controls for selecting upper limits
void SetLowerEnabled(void)
{
upperValuesLimits->Enabled = false;
upperStarsLimits->Enabled = false;
lowerValuesLimits->Enabled = true;
lowerStarsLimits->Enabled = true;
}
// Disables controls for selecting lower limits
void SetUpperEnabled(void)
{
upperValuesLimits->Enabled = true;
upperStarsLimits->Enabled = true;
lowerValuesLimits->Enabled = false;
lowerStarsLimits->Enabled = false;
}
Значение свойства Enabled для компоненты определяет доступно ли взаимодействие. Значение true разрешает взаимодействие, а значение false - нет, так что пользователь не может взаимодействовать с объектом.
Функция SetLowerEnabled () функция запрещает ввод верхнего предела и разрешает ввод нижних пределов. Функция SetUpperEnabled() делает обратное.
Модернизация обработчиков пунктов меню Limits
Последний шаг, который завершит поддержку ввода пределов для закладки Euromillions, должен модернизировать обработчики для события Click в классе Form1 для пунктов меню Limits.
Обработчик пункта меню Upper должен быть изменен следующим образом:
System::Void upperMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{
::DialogResult result;
if(lottoTab->Visible)
{
lottoLimitsDialog->SetUpperEnabled();
result = lottoLimitsDialog->ShowDialog(this);
if(result == ::DialogResult::OK)
{
lottoUserMaximum = lottoLimitsDialog->UpperLimit;
lottoUserMinimum = lottoLimitsDialog->LowerLimit;
}
}
else if(euroTab->Visible)
{
euroLimitsDialog->SetUpperEnabled();
result = euroLimitsDialog->ShowDialog(this);
if(result == ::DialogResult::OK)
{
euroUserMaximum = euroLimitsDialog->UpperValuesLimit;
euroUserMinimum = euroLimitsDialog->LowerValuesLimit;
euroStarsUserMaximum = euroLimitsDialog->UpperStarsLimit;
euroStarsUserMinimum = euroLimitsDialog->LowerStarsLimit;
}
}
}
Локальная переменная result используется в обоих операторах if, поэтому
теперь она объявляется в начале функции.
После предоставления возможности контроля в диалоговом окне с помощью функции SetUpperEnabled () Вы выводите диалоговое окно как модальное.
Если пользователь закрывает диалоговое окно, щелкая кнопкой OK, Вы сохраняете результаты доступными с помощью свойств диалогового объекта.
Изменения обработчика для события Click пункта меню Lower аналогичны:
System::Void lowerMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{
::DialogResult result;
if(lottoTab->Visible)
{
lottoLimitsDialog->SetLowerEnabled();
result = lottoLimitsDialog->ShowDialog(this);
if(result == ::DialogResult::OK)
{
lottoUserMaximum = lottoLimitsDialog->UpperLimit;
lottoUserMinimum = lottoLimitsDialog->LowerLimit;
}
}
else if(euroTab->Visible)
{
euroLimitsDialog->SetLowerEnabled();
result = euroLimitsDialog->ShowDialog(this);
if(result == ::DialogResult::OK)
{
euroUserMaximum = euroLimitsDialog->UpperValuesLimit;
euroUserMinimum = euroLimitsDialog->LowerValuesLimit;
euroStarsUserMaximum = euroLimitsDialog->UpperStarsLimit;
euroStarsUserMinimum = euroLimitsDialog->LowerStarsLimit;
}
}
}
Логика здесь та же, что и в предыдущей функции-обработчике.