我目前正在做一项家庭作业,需要设置一个计算器类型的程序。它需要读取一个或两个用户输入的值(取决于计算),然后根据这些值执行计算。
我目前有
2个文本框(tbInput1
和tbInput2
),
4个单选按钮,
一键(btnCalc
)
一个空白的label
将在其中显示结果。
选中时,两个单选按钮(rbtnTrap
和rbtnFak
)禁用第一个textBox。其他两个需要输入两个值,因此,选中时启用两个文本框。当相关数目的文本框具有值时,应该启用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;
}
}
最佳答案
因为这是一项家庭作业,所以我不会给出直接的答案,而是要提示:问题出在tbInput2_TextChanged
事件的代码(您发布的代码)中。
选中rbtnTrap
或rbtnFak
时,您的代码将按照您认为不会的路径运行。在tbInput2_TextChanged
代码的第一行上设置一个断点(F9),并在tbInput2
中输入一些文本后逐步运行该代码(F10)。
您将看到为什么按您的想法启用按钮btnCalc
,但在下一刻将其禁用。
如果以后需要更多帮助,请随时发表评论。 :)
编辑
问题来自您的if
块。当rbtnTrap
和rbtnFak
之一被选中时:
您的代码将在第一个块的if
子句中运行,然后执行btnCalc.Enabled = true;
,但是...
它也将在第二个块的else
子句中运行(因为(rbtnPot.Checked || rbtnFib.Checked)
为false),因此也会执行btnCalc.Enabled = false;
。