C# WPF开发的U-R-I计算器计算结果时对时错如何解决?
问题原因
- 核心逻辑错误:两个输入框的文本变更事件都读取了同一个名为
textbox_test的输入框内容。第二个输入框对应的TestTextbox2_TextChanged事件中,你依然将s_test2赋值为第一个输入框的文本,导致s_test1和s_test2实际存储的都是第一个输入框的输入值:当两个输入值相同时计算结果恰好正确,输入值不同时结果就会出现异常。 - 潜在风险:用全局字符串变量缓存输入的逻辑存在隐患,如果用户未输入内容就点击计算、或者输入非数字内容,程序会直接抛出转换异常崩溃。
修复方案
推荐直接优化计算逻辑,去掉冗余的全局变量缓存,在计算按钮点击时直接读取两个输入框的实时值,同时增加输入合法性校验,示例代码如下:
using System; using System.Windows; namespace URI_CALC { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private void Button_Calc_GETU_Click(object sender, RoutedEventArgs e) { // 注意将下方的textbox_test2替换为你第二个输入框实际的Name属性值 if (double.TryParse(textbox_test.Text, out double r) && double.TryParse(textbox_test2.Text, out double i)) { double u = r * i; textblock_u.Text = u.ToString(); } else { textblock_u.Text = "请输入合法的数字"; } } // 可以删除两个TextChanged事件和对应的全局变量,不需要额外缓存输入值 } }
如果你要保留原来的TextChanged缓存逻辑,只需要把TestTextbox2_TextChanged事件中的取值对象修改为你第二个输入框的实际Name即可。
内容的提问来源于stack exchange,提问作者Icecreampie
相关产品推荐
相关产品推荐

