2011-11-26 127 views
3

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

我现在有

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

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

的问题是,当我检查rbtnTraprbtnFak(禁用tbInput1)和tbInput2输入一个整数,btnCalc撑禁用。

我会尽力解释我到目前为止有:

  • _TextChanged事件tbInput1,我有第二if块贴在下面的精确副本。 tbInput1仅在rbtnPotrbtnFib被选中时才有效,以便仅在这种情况下才能运行控制。
  • _TextChanged事件tbInput2,我有以下的,因为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; 
    } 
} 

回答

2

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

当选中rbtnTraprbtnFak时,您的代码将在您认为不会的后面运行。在tbInput2_TextChanged代码的第一行上设置一个断点(F9),然后在tbInput2中输入一些文本后,逐步运行代码(F10)。
您会看到为什么您的按钮btnCalc已启用,因为您认为它是,,但在下一时刻处于禁用状态。

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


编辑

的问题来自于您的if块。当rbtnTraprbtnFak一个检查:

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

啊哈!那么,我完全可以明白,为什么处置!= null组件会重新禁用该按钮。但是,我不确定它来自哪里,因为我必须设定程序以某种方式来完成它。任何提示? (并没有直接的答案是完全正确的,我想学习 - 不复制/粘贴:)) – Xarth

+0

我不知道你为什么在讨论“*处置!=空分量*”。你在'someObject.Dispose()'中使用“处置”这个术语吗? (请参阅我的编辑您的问题) – Otiel

+0

啊,对不起。一旦我完成了F10的运行问题,它将我带到了designer.cs文件中。我首先看到的是'protected override void Dispose(bool disposing)',并且在if(disposing &&(components!= null))之下。显然不是你的意思。感谢您的编辑和提示。我会看到关于调整我的代码以在正确的子句之后停止检查。 :) – Xarth

0

我不知道我有多么了解你的问题(我很抱歉,解释有点所有的地方),但有件事我看,是你只实施当你有两个控件需要检查时,在一个事件中测试你的测试。

这听起来像一个简单的问题,但我真的不明白在哪里实施什么和谁应该做什么,所以如果我的2美分以上是无用的,你可以再次解释这个问题,那很可能帮助寻找解决方案

+0

没问题!为清晰起见编辑 - 我希望。希望我的彩铃现在更有意义。 :) – Xarth