问题描述
我想写一个计算器,刚写到加法的时候出现了这个错误!这里是源代码:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespace计算器{publicpartialclassForm1:Form{publicenumCalcuType//运算符{None,///<summary>///加减乘除///</summary>Addition,Substraction,Multiplication,Division,///<summary>///乘方///</summary>Involution,///<summary>///开方///</summary>Square,}privatedouble?_ValueF=null;//按下数字按钮前的数字privatedouble?_ValueL=null;//按下数字按钮后的数字privateCalcuType_CalculateType=CalcuType.None;publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){btnVal0.Click+=newEventHandler(btnVal_Click);btnVal1.Click+=newEventHandler(btnVal_Click);btnVal2.Click+=newEventHandler(btnVal_Click);btnVal3.Click+=newEventHandler(btnVal_Click);btnVal4.Click+=newEventHandler(btnVal_Click);btnVal5.Click+=newEventHandler(btnVal_Click);btnVal6.Click+=newEventHandler(btnVal_Click);btnVal7.Click+=newEventHandler(btnVal_Click);btnVal8.Click+=newEventHandler(btnVal_Click);btnVal9.Click+=newEventHandler(btnVal_Click);}privatevoidbtnVal_Click(objectsender,EventArgse){Buttonbtn=(Button)sender;if(this._ValueF==null){this._ValueF=double.Parse(btn.Text);}else{this._ValueL=double.Parse(btn.Text);}this.txtValue.Text=btn.Text;}privatevoidbtnAddition_Click(objectsender,EventArgse){this._CalculateType=CalcuType.Addition;}privatevoidbtnResult_Click(objectsender,EventArgse){switch(_CalculateType){caseCalcuType.Addition:this.txtValue.Text=(_ValueF+_ValueL).ToString();try{this._ValueF=double.Parse(this.txtValue.Text);}catch{MessageBox.Show("噢!");}break;caseCalcuType.Substraction:break;caseCalcuType.Multiplication:break;caseCalcuType.Division:break;caseCalcuType.Involution:break;caseCalcuType.Square:break;}}privatevoidbtnC_Click(objectsender,EventArgse){this._ValueF=null;this._ValueL=null;this._CalculateType=CalcuType.None;this.txtValue.Text="0.";}}}当然还没有写完,但是在编译的时候没有错误,但是运行的时候出现了错误!错误就是我的那段trycatch代码里面的一句话我用trycatch就是排错如果我去掉trycatch软件的提示是这是winform的排版这个是我用winform做的请大神看看
解决方案
解决方案二:
txtValue文本框里面没有值,或者值不是数字了。就会出现解析错误。
解决方案三:
可以用double.TryParse,解析不成功,返回false.你在现实friendly的错误信息。
解决方案四:
还是没有太弄明白,您可不可在代码上标识一下!
解决方案五:
this.txtValue.Text=(_ValueF+_ValueL).ToString();try{this._ValueF=double.Parse(this.txtValue.Text);}catch{MessageBox.Show("噢!");}这个this.txtValue.Text显示的是什么把值放上来
解决方案六:
再输入时,具体说可能就是KeyDown事件中,你就要判断当前已经输入的字符串、加上刚键入的字符(可能要将keycode转为ascii字符),所得到的字符串进行tryparse转换,如果返回false,就直接为这个KeyDown事件的返回值设置“拒绝输入字符”。这才是传统计算器的设计。先学会复制出传统的业务逻辑流程,这个比你编程更重要。
解决方案七:
这个this.txtValue.Text是TextBox里面的显示的值但是现在当按钮按下的时候值不显示
解决方案八:
说明输入不是数字
解决方案九:
报错时看看CallStack走到哪里了
解决方案十:
this.txtValue.Text="0.";"0."没有办法转化为double
解决方案十一:
界面倒是还不错,但楼主能不能学学单步调试这个基本功啊。
解决方案十二:
因为空字符串转换一定失败。
解决方案十三:
try{//抓住错误}catch(System.Exceptionex){MessageBox.Show(ex.ToString());}