有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 6584|回复: 71
收起左侧

简单易懂的现代魔法:C#编程教程(五) 简单计算器示例

[复制链接]

该用户从未签到

28

主题

103

好友

9783

积分

技术宅认证程序员

苦逼,受剥削人民

积分
9783
发表于 2012-6-3 15:42:53 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
本帖最后由 秋声赋 于 2012-6-4 11:57 编辑

简单易懂的现代魔法:C#编程教程()
                                                简单计算器示例

很久没写了,主要是觉得4篇之后没什么人关注了...

本帖是很久以前就完成了的,只是一直没找到时间来发,乘着现在有时间,把这个帖子发出来.

本帖将带你们用C#做一个简单的计算器程序.

就像Windows自带的那样,当然只包括标准版,学会了标准版的做法,做其他类型的计算器就不难了,希望大家能举一反三把剩余的功能做出来.

本帖要求有基本的VS2010使用能力和知道C#的基本语法,就是前面的帖子说的那些,这算一个综合应用.


先说明一点,我会把源代码在附上,但是我更希望大家手打这些代码到编辑器中.手打的过程中能发现很多自己没注意的问题,而且代码并不多.

相应代码的逻辑,我会在代码中用注释表示出来,不会用文字写在帖子里面.

所以在介绍各个部分的时候,我会用图片的形式贴上代码,还一个原因就是论坛的代码高亮功能实在脑残,如果只有一种颜色,看代码会有些吃力.
//====================================================================================\\

首先我们来介绍一下我们要做的这个计算器的功能和大概思路.

1.jpg

上面是程序的界面,2个文本框(TextBox)23个按钮(Button)控件所构成.


如字面所说,他具有一个简单计算器的功能,可以通过按钮和键盘输入,上面一个文本框是显示当前的计算式,下面是结果.如果还有不明白的可以打开Windows自带的计算器试验一下.

思路如下:
1.      我们需要一个枚举来记录我们当前的操作符.
2.      分为3种按钮:数字,操作符,退格键.分别对应3个响应函数.
3.      通过读取按钮上的文字来判断各个按钮的功能.
4.      因为输入全为个位整数,用小数点和小数点后面的数的数目表示小数.
5.      通过下面的文本框记录和传递所输入的数字

了解了这些,我们就可以开始制作我们的计算器了.

首先打开VS2010建一个C#Windows窗体应用程序(WinForm)
2.jpg

然后从工具箱中拖出2TextBox控件23Button控件摆放如下图:
3.jpg 4.jpg

并为每一个控件命名和修改Text属性(显示的字符),为了增加程序的可读性,

为每一个按钮和文本框都取上代表其含义的名字.具体可以看后面我发的源代码.
5.jpg

这是系统自动生成的代码,最后面就是按钮的名字,不要吐槽我的英语,一直在及格边缘徘徊.

然后就进入代码编辑页面.

根据上面的分析,我们首先要一个枚举来标识运算符(其实只用数字也能记录,但是为了程序的可读性和安全性,我们选择枚举来记录).定义如下

6.jpg
然后我们需要几个变量来帮助我们记录当前的状态.(无视图片中全局2个字)

7.jpg
Operators是我们刚刚定义的枚举噢.

接着是完成4消息响应函数,这是整个程序的核心,他们分别是:

数字按钮消息响应函数(number_click),

操作符按钮响应函数(button_Oper_Click),

退格键按钮响应函数(BT_BACK_Click),

文本框键盘消息响应函数(TB_FORMULA_KeyDown).

首先在按钮的[属性]—[事件]处为每一个按钮添加相应的事件.并双击函数名进入代码编辑状态.

注意不要用自动生成的函数!要自己取函数名,且响应的按钮类别对应响应的响应函数.
8.jpg

最先讲下数字按钮消息响应函数(number_click).这个函数的目的是处理用户按下按钮的Click事件,

记录按下按钮对应的数字,并根据当前的状态(是否有小数点)来保存数字,并修改文字框TB_FORMULA所显示的数字.代码和原理如下所示:

9.jpg
然后是最复杂的操作符按钮响应函数,这个函数的目的是响应用户按下的操作符按钮,

当一个操作符按钮被按下时,系统要根据上一个运算符来对当前的数字进行一定的操作.

并根据按钮的文本判断是那种操作符,并记录下来,不同的操作符也对应了不同的操作.主要用到了Case分支语句,代码如下:

10(1).jpg
10(2).jpg
10(3).jpg

10(4).jpg
接下来是退格键响应函数(BT_BACK_Click),他的作用是响应退格键,并从2个文本框里面删除最后一位,

并更新记录输入数据的变量.代码如下:
11.jpg

最后是键盘响应函数,首先为我们的TB_EXPRESSIION文本框添加一个KeyDown事件的消息响应函数TB_FORMULA_KeyDown.如下图所示.
12.jpg
那怎么发生相应的消息呢?我们是用模拟用户点击按钮的方法实现.

首先判断用户按的是那个键,再调用相应的按钮响应函数,并把相应的按钮当做参数发送给响应函数.

例如当用户按下小键盘的1,因为他是数字按钮,我们就调用number_click函数,并把他的第一个参数(objectsende)设置为BT_1表示用户按了1的按钮.至于第二个参数,因为我们不要用他,把他设为null就行.代码如下:

13.jpg

其中Keys里面有所有键盘按键对应的代码,例如NumPad1就是小键盘1的意思.

到这里我们的计算器就做好了,大家可以编译并运行试一下效果.

14.jpg

如果有不懂的地方可以回帖问我.

下面布置个作业:做出Windows自带的计算器的科学型.

WindowsFormsApplication3.zip

64.6 KB, 下载次数: 10, 下载积分: 宅币 -50 枚, 活跃 1 ℃

评分

参与人数 6宅魂 +2 宅币 +169 贡献 +21 元气(技能点) +1 收起 理由
里缅纳 + 1 + 2 o(* ̄▽ ̄*)ブ 发糖
Sonivy.Ray + 1 + 2 Σ( ° △ °|||)︴ 碉堡了
风音洛洛 + 40 + 4 + 1 Σ( ° △ °|||)︴ 碉堡了
软软的上嘴唇 + 10 + 10 o(* ̄▽ ̄*)ブ 发糖
Nate + 75 o(* ̄▽ ̄*)ブ 发糖
hcl + 40 + 7 o(* ̄▽ ̄*)ブ 发糖

查看全部评分

签名被小宅喵吞掉了~~~~(>_<)~~~~
回复

使用道具 举报

该用户从未签到

2

主题

46

好友

3万

积分

第二章

积分
35481
发表于 2012-6-3 23:56:12 | 显示全部楼层
WZ
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 160 天

连续签到: 1 天

19

主题

101

好友

3071

积分

序章

积分
3071
发表于 2012-6-3 23:56:49 | 显示全部楼层
我想认真回复的........................但是.................
“本帖子中包含更多资源,您所在的用户组无法下载或查看附件”
实在是回复不了
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

46

好友

3万

积分

第二章

积分
35481
发表于 2012-6-4 00:00:20 | 显示全部楼层
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

228

主题

138

好友

8万

积分

Webmaster

积分
89792
发表于 2012-6-4 00:04:57 | 显示全部楼层
EricHo 发表于 2012-6-3 23:56
我想认真回复的........................但是.................
“本帖子中包含更多资源,您所在的用户组无 ...

应该可以了,调整权限了,因为之前带宽和服务器原因,限制附件流出了。
回复 支持 反对

使用道具 举报

该用户从未签到

28

主题

103

好友

9783

积分

技术宅认证程序员

苦逼,受剥削人民

积分
9783
 楼主| 发表于 2012-6-4 00:14:20 | 显示全部楼层
石头肉丸子 发表于 2012-6-4 00:04
应该可以了,调整权限了,因为之前带宽和服务器原因,限制附件流出了。 ...

上次我发的一个帖子没人看。。
就是关于bilibili可能会增加 科学技术板块的
你关注下这个东西
是推广的好机会
特别是PS那区的人  很好出视频吧
还有发帖不能贴代码
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

58

主题

229

好友

3万

积分

第二章

积分
36384
发表于 2012-6-4 10:10:06 | 显示全部楼层
绝对不是没人关注了、等我论文写完答辩完就来搞、。。
[url=http://weibo.com/hinatashuishui]男なら、谁かのために强く
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

248

主题

365

好友

3万

积分

傲娇娘

User your imagination Bitch!

积分
33328
发表于 2012-6-4 11:28:01 | 显示全部楼层
不知道为什么 ,做的东西 老是不 能用=。=卡死
一直奋斗在起床的第一线!
回复 支持 反对

使用道具 举报

签到天数: 1 天

连续签到: 1 天

[LV.1]初来乍到

248

主题

365

好友

3万

积分

傲娇娘

User your imagination Bitch!

积分
33328
发表于 2012-6-4 11:28:38 | 显示全部楼层
秋声赋 发表于 2012-6-4 00:14
上次我发的一个帖子没人看。。
就是关于bilibili可能会增加 科学技术板块的
你关注下这个东西

经常没人看
一直奋斗在起床的第一线!
回复 支持 反对

使用道具 举报

该用户从未签到

28

主题

103

好友

9783

积分

技术宅认证程序员

苦逼,受剥削人民

积分
9783
 楼主| 发表于 2012-6-4 11:58:32 | 显示全部楼层

我把工程文件发上去了
你可以看看
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

签到天数: 160 天

连续签到: 1 天

[LV.7]常住居民III

1303

主题

603

好友

15万

积分

Webmaster

积分
159018
发表于 2012-6-4 12:51:03 | 显示全部楼层
秋声赋 发表于 2012-6-4 00:14
上次我发的一个帖子没人看。。
就是关于bilibili可能会增加 科学技术板块的
你关注下这个东西

贴HTML代码,按照DZ官方的说法的话,有很大的安全隐患。

B站科学技术版块的话,会关注的了。
回复 支持 反对

使用道具 举报

该用户从未签到

163

主题

73

好友

4万

积分

第二章

积分
45516
发表于 2012-6-4 12:58:57 | 显示全部楼层
马着,这两天做...
[url=http://www.gn00.com/forum-110-1.html]<font color="DarkOrange">跟着船长起航
回复 支持 反对

使用道具 举报

该用户从未签到

97

主题

75

好友

1万

积分

第一章

积分
11926
发表于 2012-6-4 15:02:00 | 显示全部楼层
代码要放到代码块里面!不需要截屏啊....
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

28

主题

103

好友

9783

积分

技术宅认证程序员

苦逼,受剥削人民

积分
9783
 楼主| 发表于 2012-6-4 17:09:17 | 显示全部楼层
Richeir 发表于 2012-6-4 15:02
代码要放到代码块里面!不需要截屏啊....

发帖不能贴代码
我不是都发了工程文件了么
而且粘贴复制也没啥意义吧
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

该用户从未签到

0

主题

1

好友

449

积分

Continue

积分
449
发表于 2012-6-4 19:57:14 | 显示全部楼层
没人吐糟你的字体和配色么。。
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-5-19 15:46 , Processed in 0.237799 second(s), 40 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表