C#窗体计算器

本文介绍了一个使用窗体编写的简易计算器程序。该程序能够实现基本的数学运算,并详细展示了使用C#进行界面设计的方法,包括TextBox和Button控件的应用。

使用窗体写的计算器小程序,不是十分完善,键盘输入只能输入数字键,其他需要换档键的键的输入没有搞懂,先发上来左右,以作留存。

界面截图

主要使用的是TextBox和button控件

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.Linq;
  7 using System.Text;
  8 using System.Threading.Tasks;
  9 using System.Windows.Forms;
 10 
 11 namespace WindowsFormsApplication1
 12 {
 13     public partial class jisuanqi : Form
 14     {
 15         //存储上次点击了什么按钮,0代表什么都没点击,1代表点击了数字按钮,2代表点击了运算符
 16         private int prev = 0;
 17         //存储中间结果
 18         private decimal zjjg = 0;
 19         //记录上次按的什么运算符
 20         private string  preysf = "+";
 21         //记录上次按的是等号
 22         private int denghao = 0;
 23 
 24 
 25         public jisuanqi()
 26         {
 27             InitializeComponent();
 28         }
 29 
 30         private void button1_Click(object sender, EventArgs e)
 31         {
 32             Button btn = sender as Button;
 33 
 34             //替换(如果下面文本框内容为0或者上次点击了运算符)
 35             if (prev == 2 || TXTbottom.Text == "0")
 36             {
 37                 TXTbottom.Text = btn.Text;
 38             }
 39             //追加(如果下面文本框内容不为0并且上次没有点击运算符)
 40             else
 41             {
 42                 TXTbottom.Text += btn.Text;
 43             }
 44 
 45             prev = 1;
 46             
 47         }
 48 
 49         private void button4_Click(object sender, EventArgs e)
 50         {
 51             Button btn = sender as Button;
 52 
 53            
 54 
 55             //上次按了数字
 56             if (prev == 1)
 57             {
 58                 TXTTOP.Text += TXTbottom.Text + btn.Text;
 59                 switch (preysf)
 60                 {
 61                     case "+":
 62                         zjjg = zjjg + Convert.ToDecimal(TXTbottom.Text);
 63                         break;
 64                     case "-":
 65                         zjjg = zjjg - Convert.ToDecimal(TXTbottom.Text);
 66                         break;
 67                     case "*":
 68                         zjjg = zjjg * Convert.ToDecimal(TXTbottom.Text);
 69                         break;
 70                     case "/":
 71                         zjjg = zjjg / Convert.ToDecimal(TXTbottom.Text);
 72                         break;
 73                 }
 74                 TXTbottom.Text = zjjg.ToString();
 75             }
 76             //上次按了运算符///
 77             else
 78             {
 79                 string s = TXTTOP.Text;
 80                 if (s.Length >= 1)
 81                 {
 82                     s = s.Substring(0, s.Length - 1);
 83                     s = s + btn.Text;
 84                 }
 85                 else
 86                 {
 87                     s = "0";
 88                     s = s + btn.Text;
 89                 }
 90                 TXTTOP.Text = s;
 91             }
 92             //加号
 93             prev = 2;
 94             preysf = btn.Text;
 95         }
 96 
 97         private void button15_Click(object sender, EventArgs e)
 98         {
 99             TXTTOP.Text = "";
100             TXTbottom.Text = "0";
101             prev = 0;
102             zjjg = 0;
103             preysf = "+";
104         }
105 
106         private void jisuanqi_KeyDown(object sender, KeyEventArgs e)
107         {
108 
109 
110             if (
111                 e.KeyCode == Keys.D0 || e.KeyCode == Keys.NumPad0 ||
112                 e.KeyCode == Keys.D1 || e.KeyCode == Keys.NumPad1 || 
113                 e.KeyCode == Keys.D2 || e.KeyCode == Keys.NumPad2 ||
114                 e.KeyCode == Keys.D3 || e.KeyCode == Keys.NumPad3 ||
115                 e.KeyCode == Keys.D4 || e.KeyCode == Keys.NumPad4 || 
116                 e.KeyCode == Keys.D5 || e.KeyCode == Keys.NumPad5 ||
117                 e.KeyCode == Keys.D6 || e.KeyCode == Keys.NumPad6 ||
118                 e.KeyCode == Keys.D7 || e.KeyCode == Keys.NumPad7 || 
119                 e.KeyCode == Keys.D8 || e.KeyCode == Keys.NumPad8 ||
120                 e.KeyCode == Keys.D9 || e.KeyCode == Keys.NumPad9 
121                 )
122             {
123                 if (prev == 2 || TXTbottom.Text == "0")
124                 {
125                     string a = e.KeyData.ToString();
126                     TXTbottom.Text = a.Substring((a.Length-1),1); 
127                 }
128                 else
129                 {
130                     string a = e.KeyData.ToString();
131                     TXTbottom.Text += a.Substring((a.Length - 1), 1); 
132                     
133                 }
134                 prev = 1;
135             }
136             //else if (
137             //    //e.KeyCode == Keys.Add || e.KeyCode == Keys.Subtract || e.KeyCode == Keys.Multiply || e.KeyCode == Keys.Divide||
138             //    e.KeyCode==Keys.Shift&&e.KeyCode==Keys.D8
139             //    )
140             //{
141             //    MessageBox.Show(e.KeyData.ToString());
142             //}
143             else if(e.KeyCode==Keys.Back)
144             {
145                 string s = TXTbottom.Text;
146                 if (s.Length >= 1)
147                 {
148                     s = s.Substring(0, s.Length - 1);
149                 }
150                 else
151                 {
152                     s = "";
153                 }
154                 TXTbottom.Text = s;
155             }
156         }
157 
158         private void button17_Click(object sender, EventArgs e)
159         {
160             string s = TXTbottom.Text;
161             if (s.Length >= 1)
162             {
163                 s = s.Substring(0, s.Length - 1);
164             }
165             else
166             {
167                 s = "";
168             }
169             TXTbottom.Text = s;
170         }
171 
172         private void button14_Click(object sender, EventArgs e)//等号
173         {
174             Button btn = sender as Button;
175 
176             //上次按了数字
177             if (prev == 1)
178             {
179                 TXTTOP.Text += TXTbottom.Text + btn.Text;
180                 switch (preysf)
181                 {
182                     case "+":
183                         zjjg = zjjg + Convert.ToDecimal(TXTbottom.Text);
184                         break;
185                     case "-":
186                         zjjg = zjjg - Convert.ToDecimal(TXTbottom.Text);
187                         break;
188                     case "*":
189                         zjjg = zjjg * Convert.ToDecimal(TXTbottom.Text);
190                         break;
191                     case "/":
192                         zjjg = zjjg / Convert.ToDecimal(TXTbottom.Text);
193                         break;
194                 }
195                 TXTbottom.Text = zjjg.ToString();
196             }
197             //上次按了运算符///
198             else
199             {
200                 string s = TXTTOP.Text;
201                 if (s.Length >= 1)
202                 {
203                     s = s.Substring(0, s.Length - 1);
204                     s = s + btn.Text;
205                 }
206                 else
207                 {
208                     s = "0";
209                     s = s + btn.Text;
210                 }
211                 TXTbottom.Text = s;
212             }
213             //加号
214             prev = 2;
215             preysf = btn.Text;
216             TXTTOP.Text = "";
217             zjjg = 0;
218             preysf = "+";
219             denghao = 1;
220         }
221 
222         private void jisuanqi_Load(object sender, EventArgs e)
223         {
224 
225         }
226     }
227 }

程序冗余还是有点多,目前没有想要要怎么精简

转载于:https://www.cnblogs.com/bloodPhoenix/p/5806466.html

一、实验题目:计算器实验 二、实验目的: 1)熟悉.NET的编程方法,掌握项目的创建与使用及安装; 2)熟悉C#编程语言,字符串使用、自定义类、自定义类库等; 3)熟悉Windows应用程序类编程、事件驱动编程; 三、实验内容: 1)参照Windows提供的计算器工具,设计一个与之类似的程序;另外可参考运行效果下载(计算器Demo程序); 2)基本要求:实现“普通运算”功能,支持连续运算,如连续输入“2+3×5”后点击“等号”按钮进行运算其结果为25. 3)附加要求: A,支持“科学运算”功能,即输入表达式时遵循运算符号的优先原则,连续输入“2+3×5”后点击“等号”按钮进行运算其结果为17; B,支持数字键盘(小键盘)输入功能(焦点不在文本框内时也支持键盘输入); 四、实验方法 经过用户的输入得到数学表达式后,可选择以下方法计算结果: 方法1)不定义"计算类",根据用户输入在程序中直接计算出结果。 方法2)在项目中设计一个计算类(CalculateClass),其中包含“普通计算”和“科学计算”功能,即输入数学运算表达式字符串,返回计算结果。直接在项目中调用该类,输出计算结果。 方法3)在解决方案中增加一个类库(ClassLibrary)项目(在bin\debug下生成dll文件),其中包含计算类(CalculateClass),该类中包含两个方法(普通计算和科学计算),可以根据表达式计算结果。然后在计算器项目中“引用”该类库中的类,输出计算结果; 点评:方法1代码重用性差;方法2代码重用性好,在项目内可方便使用;方法3代码重用性较好,能在不同的项目内重用。 五、实验说明 1)认真分析总结每个“按钮”点击之后的动作(对应的代码); 默认的控件是Button按钮,其实可以用其他支持Click事件的控件替代也行,比如图片控件PictureBox; 2)代码的共享:如数字按钮可以共享一个事件代码; // 参考代码 private void button2_Click(object sender, EventArgs e) { Button objbutton = (Button)sender; label1.Text = "你按了第" + (sender as Button).Tag.ToString() + "个按钮"; } 3)考虑操作性或实用性,如支持退格键、异常输入处理等; 4)为突出实验重点,可以不考虑数制转换、复合运算、括号运算等功能; 5)支持数字小键盘输入时,留意理解窗口的KeyPreview属性,即是否窗口接收键盘事件。另外实现时会涉及到“焦点隐藏”问题,以及按钮的键盘事件等。 敲键盘时发生的事件当然是键盘事件,关键是“窗体”还是“控件”接收键盘事件。如果窗体的KeyPreview设为true,则敲键盘时发生的事件被窗体接收;否则就是控件接收键盘事件。 所谓“焦点隐藏” 是指界面上没有焦点,例如系统提供的计算器。方法一:界面上的控件不获取焦点或者没有焦点(如标签);方法二:将焦点藏在界面上不可见的控件上。 支持数字键盘输入的情形:当焦点在按钮1上时,按数字键2,其使用效果应相当于点击了按钮2。 6)键盘事件KeyPress和KeyDown中e参数包括键盘码; private void KeyBoardForm_KeyPress(object sender, KeyPressEventArgs e) { //KeyPress 不能识别组合键 label1.Text = "你按的键是:" + e.KeyChar; } 7)“麻雀虽小,五脏俱全”,程序很容易出Bug,请认真调试; 8)要想达到界面有特点,不亚于在功能上下功夫。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值