启用基于文本框和单选按钮的按钮
本文关键字:单选按钮 按钮 文本 于文本 启用 | 更新日期: 2023-09-27 18:15:42
我目前正在做一项家庭作业,我需要设置一个计算器类型的程序。它需要读取一个或两个用户输入的值(取决于计算),然后根据这些值执行计算。
我现在有
- 2 textBoxes (
tbInput1
和tbInput2
), - 4 radioButtons,
- 一键(
btnCalc
) - 显示结果的空白
label
。
两个单选按钮(rbtnTrap
和rbtnFak
)禁用第一个文本框时勾选;另外两个需要输入两个值,因此在选中时启用两个textbox。btnCalc
应该在相关数量的文本框有值时启用自己-相关数量的文本框取决于哪个单选按钮被选中。
问题是,当我检查rbtnTrap
或rbtnFak
(禁用tbInput1
)并在tbInput2
中输入整数时,btnCalc
保持禁用。
我试着解释一下目前为止我所知道的:
- 在
tbInput1
的_TextChanged
事件中,我有下面发布的第二个if
块的精确副本。tbInput1
只在rbtnPot
或rbtnFib
被选中时才被激活,所以控制只在这种情况下运行。 - 在
tbInput2
的_TextChanged
事件中,我有以下内容,因为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)
为假),因此btnCalc.Enabled = false;
也会运行。
我不确定我有多理解你的问题(我很抱歉,解释有点到处都是),但我确实看到的一件事是,当你有两个控件要检查时,你只在一个事件中实现你的测试。
这听起来像是一个简单的问题,但我真的不明白什么是在哪里实现的,谁应该做什么,所以如果我上面的2美分没用,你可以再解释一下这个问题,这可能会帮助找到一个解决方案