我的第一个winform程序:简单的计算器(4)
接上篇
在编写运算符按钮事件时,我很头痛什么时候把前面计算的数转到temp里,后来就列了个表,把各种情况对应的temp,left,right是否为empty罗列出来就很清楚了。
下面是等号按钮事件
等号其实和加减号差不多,就是要把所有的结果都计算出来。
1
2
public static void EqualClick() //等号按钮事件
3
{
4
if(left==string.Empty)
5
{
6
left=sign+right;
7
right=string.Empty;
8
n=0;
9
}
10
else
11
{
12
left=Calculate(tempNum,Calculate(left,sign+right,operators),tempOperator);
13
tempNum=string.Empty;
14
tempOperator=string.Empty;
15
right=string.Empty;
16
n=0;
17
}
18
if(left.Length>MaxLength)
19
throw new CalculationExcption("计算结果越界",true);
20
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
至此,计算器主要的组件就完成了,下面处理异常。
我自定义了一个异常类MyExcption然后从中派生出2个异常类,一个用来处理由计算器本身设置产生的异常,比如计算结果的位数超过了所允许的范围,这个异常类是CalculationExcption;另一个是由数学运算所导致的异常,比如被除数是0,这个异常类是MathExcption,这样,在捕获异常时,只要使用MyExcption就可以利用动态捆绑来灵活处理各种情况。
1
public abstract class MyExcption:ApplicationException //自定义异常基类,因为两派生异常类及其相似
2
{ //故添加一抽象基类以使用动态捆绑,且层次更分明
3
bool temp;
4
5
public bool Temp
6
{
7
get
8
{return temp;}
9
}
10
public MyExcption():base("抱歉,程序出现未知问题")
11
{
12
temp=true;
13
}
14
public MyExcption(string message,bool temp):base(message)
15
{
16
this.temp=temp;
17
}
18
public abstract void Information();
19
}
20
21
22
public class CalculationExcption:MyExcption //由计算器设置所导致的异常
23
{
24
public CalculationExcption():base()
25
{}
26
public CalculationExcption(string message,bool temp):base(message,temp)
27
{}
28
public override void Information()
29
{
30
if(this.Temp)
31
MessageBox.Show(this.Message+"\n已输入的内容将全部清空","警告",MessageBoxButtons.OK,MessageBoxIcon.Warning);
32
else
33
MessageBox.Show(this.Message,"警告",MessageBoxButtons.OK,MessageBoxIcon.Warning);
34
}
35
}
36
37
38
public class MathExcption:MyExcption //由运算符的性质所导致的异常,注意,没有定义默认构造函数
39
{
40
public MathExcption(string message):base(message,true)
41
{}
42
public MathExcption(string message,bool temp):base(message,temp)
43
{}
44
public override void Information()
45
{
46
if(this.Temp)
47
MessageBox.Show(this.Message+",已输入的内容将全部清空!","非法的函数参数",MessageBoxButtons.OK,MessageBoxIcon.Error);
48
else
49
MessageBox.Show(this.Message,"非法的函数参数",MessageBoxButtons.OK,MessageBoxIcon.Error);
50
}
51
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
这样,计算器就差不多完成了。这只能实现最基本的功能,随着以后的学习,我将逐渐把它完善。
完。
浙公网安备 33010602011771号