启用基于文本框和单选按钮的按钮

本文关键字:单选按钮 按钮 文本 于文本 启用 | 更新日期: 2023-09-27 18:15:42

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

我现在有

  • 2 textBoxes (tbInput1tbInput2),
  • 4 radioButtons,
  • 一键(btnCalc)
  • 显示结果的空白label

两个单选按钮(rbtnTraprbtnFak)禁用第一个文本框时勾选;另外两个需要输入两个值,因此在选中时启用两个textbox。btnCalc应该在相关数量的文本框有值时启用自己-相关数量的文本框取决于哪个单选按钮被选中。

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

我试着解释一下目前为止我所知道的:

  • tbInput1_TextChanged事件中,我有下面发布的第二个if块的精确副本。tbInput1只在rbtnPotrbtnFib被选中时才被激活,所以控制只在这种情况下运行。
  • tbInput2_TextChanged事件中,我有以下内容,因为tbInput2总是启用,无论检查哪个单选按钮,控件都必须运行,尽管如果检查rbtnTraprbtnFak而不是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)为假),因此btnCalc.Enabled = false;也会运行。

我不确定我有多理解你的问题(我很抱歉,解释有点到处都是),但我确实看到的一件事是,当你有两个控件要检查时,你只在一个事件中实现你的测试。

这听起来像是一个简单的问题,但我真的不明白什么是在哪里实现的,谁应该做什么,所以如果我上面的2美分没用,你可以再解释一下这个问题,这可能会帮助找到一个解决方案