C# 基于textBox和radiobutton启用按钮

C# 基于textBox和radiobutton启用按钮,c#,winforms,C#,Winforms,我目前正在做一个家庭作业,我需要设置一个计算器类型的程序。它需要读取一个或两个用户输入值(取决于计算),然后根据这些值执行计算 我现在有 2个文本框(tbInput1和tbInput2) 4个单选按钮 一个按钮(btnCalc) 显示结果的空白标签 选中时,其中两个单选按钮(rbtnTrap和rbtnFak)禁用第一个文本框;另外两个需要输入两个值,因此选中时启用两个文本框btnCalc应在相关文本框数有值时自动启用-相关文本框数取决于选中的单选按钮 问题是,当我选中rbtnTrap或rbt

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

我现在有

  • 2个文本框(
    tbInput1
    tbInput2
  • 4个单选按钮
  • 一个按钮(
    btnCalc
  • 显示结果的空白
    标签
选中时,其中两个单选按钮(
rbtnTrap
rbtnFak
)禁用第一个文本框;另外两个需要输入两个值,因此选中时启用两个文本框<代码>btnCalc应在相关文本框数有值时自动启用-相关文本框数取决于选中的单选按钮

问题是,当我选中
rbtnTrap
rbtnFak
(禁用
tbInput1
)并在
tbInput2
中输入一个整数时,
btnCalc
保持禁用状态

我将试着解释我到目前为止的情况:

  • tbInput1
    \u TextChanged
    事件中,我有下面发布的第二个
    if
    块的精确副本
    tbInput1
    仅在选中
    rbtnPot
    rbtnFib
    时处于活动状态,因此控件仅在这种情况下运行
  • tbInput2
    \u 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;
    }
}

我不确定我对你的问题有多了解(对不起,解释有点全面),但我确实看到了一件事,那就是当你有两个控件要检查时,你只在一个事件中执行测试


这听起来像是个简单的问题,但我真的不明白在哪里实现了什么,谁应该做什么,所以如果我上面的2美分没用,你可以再次解释这个问题,这可能会有助于找到解决方案,因为这是一个家庭作业,我不会给你一个直接的答案,但是有一个提示:问题出在
tbInput2\u TextChanged
事件(您发布的代码)的代码中

当选中
rbtnTrap
rbtnFak
时,您的代码将按照您认为不会的路径运行。在
tbInput2\u TextChanged
代码的第一行设置断点(F9),在
tbInput2
中输入一些文本后,逐步运行代码(F10)
您将看到为什么按钮
btnCalc
会像您认为的那样被启用,但在下一刻被禁用

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


编辑

问题来自
if
块。当选中
rbtnTrap
rbtnFak
中的一个时:

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

没问题!为清晰起见进行了编辑-我希望如此。希望我的闲话现在更有意义。:)啊哈!嗯,我完全明白为什么要处理一个=空组件将重新禁用该按钮。不过,我很不确定它是从哪里来的,因为我必须以某种方式设置程序。有什么提示吗?(没有直截了当的答案是很好的。我想学习-而不是复制/粘贴。)我不知道你为什么要说“处理!=null组件”。您是否使用了
someObject.Dispose()
中的“disposing”术语?(你的问题见我的编辑)啊,对不起。当我完成F10问题的处理后,我转到designer.cs文件。我看到的第一件事是
受保护的重写void Dispose(bool disposing)
,在
下面是if(disposing&&(components!=null))
。显然不是你的意思。谢谢你的编辑和提示。在右子句之后,我将查看如何调整代码以停止检查。:)