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
为false),因此执行(rbtnPot.Checked | | rbtnFib.Checked)
btnCalc.Enabled=false代码>
- 它还将在第二个块的
someObject.Dispose()
中的“disposing”术语?(你的问题见我的编辑)啊,对不起。当我完成F10问题的处理后,我转到designer.cs文件。我看到的第一件事是受保护的重写void Dispose(bool disposing)
,在下面是if(disposing&&(components!=null))
。显然不是你的意思。谢谢你的编辑和提示。在右子句之后,我将查看如何调整代码以停止检查。:)