Включение кнопки на основе textBox и radiobutton - PullRequest
3 голосов
/ 26 ноября 2011

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

В настоящее время у меня есть

  • 2 textBoxes (tbInput1 и tbInput2),
  • 4 радиокнопки,
  • одна кнопка (btnCalc)
  • , пробел label, в котором будет отображаться результат.

Два из radioButtons (rbtnTrap и rbtnFak) отключают первый текстовый блок при проверке;двум другим нужно ввести два значения, и по этой причине активировать оба текстовых поля при проверке.btnCalc должен включаться, когда значение имеет соответствующее количество текстовых ящиков - соответствующее количество текстовых ящиков зависит от того, какой переключатель выбран.

Проблема заключается в том, что когда я проверяю rbtnTrap или rbtnFak(отключение tbInput1) и введите целое число в tbInput2, btnCalc остается отключенным.

Я постараюсь объяснить, что у меня до сих пор:

  • В_TextChanged событие для tbInput1, у меня есть точная копия второго if блока, опубликованного ниже.tbInput1 активен только при проверке rbtnPot ИЛИ rbtnFib, поэтому управление выполняется только в этом случае.
  • В событии _TextChanged для tbInput2 у меня есть следующее,поскольку tbInput2 - это , всегда включено, и элемент управления должен работать независимо от того, какая радиокнопка отмечена, хотя элемент управления должен работать по-другому, если я проверяю rbtnTrap ИЛИ rbtnFak в отличие от rbtnPot ИЛИrbtnFib.

Или я так понимаю.Я, конечно, открыт для предложений и исправлений.

private void tbInput2_TextChanged(object sender, EventArgs e)
{
    //For single-field values
    if ((rbtnTrap.Checked || rbtnFak.Checked) && 
        !string.IsNullOrWhiteSpace(this.tbInput2.Text))
    {
        btnCalc.Enabled = true;
    }
    else
    {
        btnCalc.Enabled = false;
    }
    // For multi-field values
    if ((rbtnPot.Checked || rbtnFib.Checked) && 
        (!string.IsNullOrWhiteSpace(this.tbInput1.Text)
        && !string.IsNullOrWhiteSpace(this.tbInput2.Text)))
    {
        btnCalc.Enabled = true;
    }
    else
    {
        btnCalc.Enabled = false;
    }
}

Ответы [ 2 ]

2 голосов
/ 26 ноября 2011

Поскольку это домашнее задание, я не собираюсь давать вам прямой ответ, а вместо этого подсказку: проблема в коде события tbInput2_TextChanged (код, который вы опубликовали).

Когда отмечены rbtnTrap или rbtnFak, ваш код будет выполняться по такому пути, который вы не ожидали.Установите точку останова ( F9 ) в первой строке кода tbInput2_TextChanged и запускайте код шаг за шагом ( F10 ) после ввода некоторого текста в tbInput2.
Вы поймете, почему ваша кнопка btnCalc включена, как вы думаете, , но отключена в следующий момент .

Не стесняйтесь комментировать, если впоследствии вам потребуется дополнительная помощь.:)


РЕДАКТИРОВАТЬ

Проблема связана с вашими if блоками.При проверке одного из rbtnTrap и rbtnFak:

  • ваш код будет выполняться в предложении if первого блока, а затем будет делать btnCalc.Enabled = true;, но ...
  • он также будет выполняться в предложении else второго блока (поскольку (rbtnPot.Checked || rbtnFib.Checked) ложно) и, таким образом, будет btnCalc.Enabled = false;.
0 голосов
/ 26 ноября 2011

Я не уверен, насколько я понимаю вашу проблему (извините, объяснение было немного повсеместно), но я вижу одну вещь: вы выполняете свои тесты только в одномсобытие, когда у вас есть два элемента управления для проверки.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...