本帖最后由 秋声赋 于 2012-6-4 11:57 编辑
简单计算器示例
很久没写了,主要是觉得4篇之后没什么人关注了...
本帖是很久以前就完成了的,只是一直没找到时间来发,乘着现在有时间,把这个帖子发出来.
本帖将带你们用C#做一个简单的计算器程序.
就像Windows自带的那样,当然只包括标准版,学会了标准版的做法,做其他类型的计算器就不难了,希望大家能举一反三把剩余的功能做出来.
本帖要求有基本的VS2010使用能力和知道C#的基本语法,就是前面的帖子说的那些,这算一个综合应用.
先说明一点,我会把源代码在附上,但是我更希望大家手打这些代码到编辑器中.手打的过程中能发现很多自己没注意的问题,而且代码并不多.
相应代码的逻辑,我会在代码中用注释表示出来,不会用文字写在帖子里面.
所以在介绍各个部分的时候,我会用图片的形式贴上代码,还一个原因就是论坛的代码高亮功能实在脑残,如果只有一种颜色,看代码会有些吃力. //====================================================================================\\
首先我们来介绍一下我们要做的这个计算器的功能和大概思路.
上面是程序的界面,由2个文本框(TextBox)和23个按钮(Button)控件所构成.
如字面所说,他具有一个简单计算器的功能,可以通过按钮和键盘输入,上面一个文本框是显示当前的计算式,下面是结果.如果还有不明白的可以打开Windows自带的计算器试验一下.
思路如下: 1. 我们需要一个枚举来记录我们当前的操作符. 2. 分为3种按钮:数字,操作符,退格键.分别对应3个响应函数. 3. 通过读取按钮上的文字来判断各个按钮的功能. 4. 因为输入全为个位整数,用小数点和小数点后面的数的数目表示小数. 5. 通过下面的文本框记录和传递所输入的数字
了解了这些,我们就可以开始制作我们的计算器了.
首先打开VS2010建一个C#的Windows窗体应用程序(WinForm)
然后从工具箱中拖出2个TextBox控件和23个Button控件摆放如下图:
并为每一个控件命名和修改Text属性(显示的字符),为了增加程序的可读性,
为每一个按钮和文本框都取上代表其含义的名字.具体可以看后面我发的源代码.
这是系统自动生成的代码,最后面就是按钮的名字,不要吐槽我的英语,一直在及格边缘徘徊.
然后就进入代码编辑页面.
根据上面的分析,我们首先要一个枚举来标识运算符(其实只用数字也能记录,但是为了程序的可读性和安全性,我们选择枚举来记录).定义如下
然后我们需要几个变量来帮助我们记录当前的状态.(无视图片中全局2个字)
Operators是我们刚刚定义的枚举噢.
接着是完成4个消息响应函数,这是整个程序的核心,他们分别是:
数字按钮消息响应函数(number_click),
操作符按钮响应函数(button_Oper_Click),
退格键按钮响应函数(BT_BACK_Click),
文本框键盘消息响应函数(TB_FORMULA_KeyDown).
首先在按钮的[属性]—[事件]处为每一个按钮添加相应的事件.并双击函数名进入代码编辑状态.
注意不要用自动生成的函数!要自己取函数名,且响应的按钮类别对应响应的响应函数.
最先讲下数字按钮消息响应函数(number_click).这个函数的目的是处理用户按下按钮的Click事件,
记录按下按钮对应的数字,并根据当前的状态(是否有小数点)来保存数字,并修改文字框TB_FORMULA所显示的数字.代码和原理如下所示:
然后是最复杂的操作符按钮响应函数,这个函数的目的是响应用户按下的操作符按钮,
当一个操作符按钮被按下时,系统要根据上一个运算符来对当前的数字进行一定的操作.
并根据按钮的文本判断是那种操作符,并记录下来,不同的操作符也对应了不同的操作.主要用到了Case分支语句,代码如下:
接下来是退格键响应函数(BT_BACK_Click),他的作用是响应退格键,并从2个文本框里面删除最后一位,
并更新记录输入数据的变量.代码如下:
最后是键盘响应函数,首先为我们的TB_EXPRESSIION文本框添加一个KeyDown事件的消息响应函数TB_FORMULA_KeyDown.如下图所示.
那怎么发生相应的消息呢?我们是用模拟用户点击按钮的方法实现.
首先判断用户按的是那个键,再调用相应的按钮响应函数,并把相应的按钮当做参数发送给响应函数.
例如当用户按下小键盘的1时,因为他是数字按钮,我们就调用number_click函数,并把他的第一个参数(objectsende)设置为BT_1表示用户按了1的按钮.至于第二个参数,因为我们不要用他,把他设为null就行.代码如下:
其中Keys里面有所有键盘按键对应的代码,例如NumPad1就是小键盘1的意思.
到这里我们的计算器就做好了,大家可以编译并运行试一下效果.
如果有不懂的地方可以回帖问我.
下面布置个作业:做出Windows自带的计算器的科学型. |