我目前正在做一项家庭作业,需要设置一个计算器类型的程序。它需要读取一个或两个用户输入的值(取决于计算),然后根据这些值执行计算。

我目前有


2个文本框(tbInput1tbInput2),
4个单选按钮,
一键(btnCalc
一个空白的label将在其中显示结果。


选中时,两个单选按钮(rbtnTraprbtnFak)禁用第一个textBox。其他两个需要输入两个值,因此,选中时启用两个文本框。当相关数目的文本框具有值时,应该启用btnCalc本身-文本框的相关数目取决于选中了哪个单选按钮。

问题是,当我检查rbtnTraprbtnFak(禁用tbInput1)并在tbInput2中输入整数时,btnCalc保持禁用状态。

我将尽力解释到目前为止的情况:


_TextChangedtbInput1事件中,我在下面发布了第二个if块的精确副本。 tbInput1仅在选中rbtnPotrbtnFib时才处于活动状态,因此只有在这种情况下,控件才运行。
_TextChangedtbInput2事件中,我具有以下内容,因为始终启用tbInput2,并且无论选中哪个单选按钮,该控件都必须运行,尽管如果我选中rbtnTrap则该控件应以其他方式运行rbtnFak而不是rbtnPotrbtnFib


或那是我对此的理解。我当然愿意提出建议和更正。

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;
    }
}

最佳答案

因为这是一项家庭作业,所以我不会给出直接的答案,而是要提示:问题出在tbInput2_TextChanged事件的代码(您发布的代码)中。

选中rbtnTraprbtnFak时,您的代码将按照您认为不会的路径运行。在tbInput2_TextChanged代码的第一行上设置一个断点(F9),并在tbInput2中输入一些文本后逐步运行该代码(F10)。
您将看到为什么按您的想法启用按钮btnCalc,但在下一刻将其禁用。

如果以后需要更多帮助,请随时发表评论。 :)



编辑

问题来自您的if块。当rbtnTraprbtnFak之一被选中时:


您的代码将在第一个块的if子句中运行,然后执行btnCalc.Enabled = true;,但是...
它也将在第二个块的else子句中运行(因为(rbtnPot.Checked || rbtnFib.Checked)为false),因此也会执行btnCalc.Enabled = false;

10-06 06:34