📄 form1.cs
字号:
this.btn_c.Text = "C";
this.btn_c.Click += new System.EventHandler(this.btn_Oper);
//
// btn_ce
//
this.btn_ce.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));
this.btn_ce.Location = new System.Drawing.Point(104, 40);
this.btn_ce.Name = "btn_ce";
this.btn_ce.Size = new System.Drawing.Size(80, 32);
this.btn_ce.TabIndex = 21;
this.btn_ce.Text = "CE";
this.btn_ce.Click += new System.EventHandler(this.btn_Oper);
//
// btn_bak
//
this.btn_bak.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((System.Byte)(134)));
this.btn_bak.Location = new System.Drawing.Point(16, 40);
this.btn_bak.Name = "btn_bak";
this.btn_bak.Size = new System.Drawing.Size(80, 32);
this.btn_bak.TabIndex = 22;
this.btn_bak.Text = "backspace";
this.btn_bak.Click += new System.EventHandler(this.btn_Oper);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
this.ClientSize = new System.Drawing.Size(292, 261);
this.Controls.Add(this.btn_bak);
this.Controls.Add(this.btn_ce);
this.Controls.Add(this.btn_c);
this.Controls.Add(this.btn_mul);
this.Controls.Add(this.btn_div);
this.Controls.Add(this.btn_sub);
this.Controls.Add(this.btn_sqt);
this.Controls.Add(this.btn_add);
this.Controls.Add(this.btn_rev);
this.Controls.Add(this.btn_eql);
this.Controls.Add(this.btn_dot);
this.Controls.Add(this.btn_sign);
this.Controls.Add(this.btn_0);
this.Controls.Add(this.btn_3);
this.Controls.Add(this.btn_2);
this.Controls.Add(this.btn_1);
this.Controls.Add(this.btn_6);
this.Controls.Add(this.btn_5);
this.Controls.Add(this.btn_4);
this.Controls.Add(this.btn_9);
this.Controls.Add(this.btn_8);
this.Controls.Add(this.btn_7);
this.Controls.Add(this.txtBox);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.Menu = this.mainMenu1;
this.Name = "Form1";
this.Text = "计算器";
this.Load += new System.EventHandler(this.Form1_Load);
this.ResumeLayout(false);
}
#endregion
#region 各和常数变量的声明
public const int NULL = 0; // 定义操作码
public const int ADD = 1; //表示加
public const int SUB = 2; //减
public const int MUL = 3; //乘
public const int DIV = 4; //除
public const int SQRT = 5; //求平方根
public const int NODOT = 0; // 定义是否点击了小数点,0为没点
public const int HASDOT = 1; //定义是否点击了小数点,1为点了
private double res = 0; // 记录结果数
private double tmp = 0; // 当前输入的操作数
private int opt = NULL; // 记录操作码
private int dot = NODOT; // 记录是否点击了小数点,初始值设为0为没有点
private int num = 0; // 记录输入操作数的个数
private int dotnum = 0; // 记录小数点部分的个数
string strOper; //获取操作符
#endregion
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.Run(new Form1());
}
#region 获取操作数事件
private void btn_0_Click(object sender, System.EventArgs e)
{
System.Windows.Forms.Button btnTmp;
double i;
btnTmp = sender as System.Windows.Forms.Button; //用来判断事件是否是按键操作
if (btnTmp != null)
{
if (dot == NODOT) // 没有点击小数点
{
i = double.Parse(btnTmp.Tag.ToString()); //取用户自定义的控件关联数,并转换成double型
tmp = tmp * 10 + i; //按键的先后位数依次减少10倍,原数升位再加上新数作为个位
txtBox.Text = tmp.ToString(); //将其转化成文本显示
}
else // 点击了小数点
{
dotnum++; //记录小数点部分的个数
// 生成小数部分的新的数值
i = double.Parse(btnTmp.Tag.ToString()) / System.Math.Pow(10,dotnum);
tmp = tmp + i; //将小数点后的值加到当前操做数
txtBox.Text = tmp.ToString();
}
}
}
#endregion
#region 获取操作符
private void btn_Oper(object sender, System.EventArgs e)
{
Button tmp1=(Button)sender;
strOper=tmp1.Text;
/*添加*/
switch (strOper)
{
case "/": //除法运算
if(opt!=NULL&&opt!=DIV) //用来做连运算,实现上一次计算,近似等于等号
{
calc();
}
opt = DIV;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
{
if (tmp != 0)
res = res / tmp;
else
{
txtBox.Text="零不能做除数";
break;
}
}
else
res = tmp;
num++;
tmp = 0;
txtBox.Text = res.ToString();
dot = NODOT;
break;
case "*":
// 乘法运算
if(opt!=NULL&&opt!=MUL)
{
calc();
}
opt = MUL;
if (num!= 0 ) //判断操作数的个数,如果两个就做二元运算
{
if(tmp!=0)
res = res * tmp;
}
else
res = tmp;
num++;
tmp = 0;
txtBox.Text = res.ToString();
dot = NODOT;
break;
case "+": //加法运算
if(opt!=NULL&&opt!=ADD) //非首次运算或连加
{
calc();
}
opt = ADD;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
res = res + tmp;
else
res = tmp;
num++;
tmp = 0;
txtBox.Text = res.ToString();
dot = NODOT;
break;
case "-": //减法运算
if(opt!=NULL&&opt!=SUB)
{
calc();
}
opt = SUB;
if (num != 0) //判断操作数的个数,如果两个就做二元运算
res = res - tmp;
else
res = tmp;
num++;
tmp = 0;
txtBox.Text = res.ToString();
dot = NODOT;
break;
case "sqt": //平方根运算
if (tmp > 0) //要求操作数大于0
{
tmp = Math.Sqrt(tmp);
}
txtBox.Text =tmp.ToString();
num++;
dot = NODOT;
break;
case "1/x": //倒数运算
if (tmp != 0)
{
tmp = 1 / tmp;
txtBox.Text = tmp.ToString();
}
else
txtBox.Text ="零不能为除数";
dot = NODOT;
break;
case ".":
// 点击了小数点
if(dot==HASDOT)
return;
else
{
dot = HASDOT;
dotnum = 0;
}
break;
case "+/-":
// 点击了符号运算
if(tmp!=0) //对运算数取反
{
tmp = -tmp;
txtBox.Text = tmp.ToString();
}
else
{
res=-res; //对结果取反
txtBox.Text = res.ToString();
}
dot = NODOT;
break;
case "C": //清除运算
res = 0;
tmp = 0;
opt = NULL;
dot = NODOT;
num = 0;
dotnum = 0; //恢复初始设定
txtBox.Text="0.";
break;
case "CE": //清除最后输入的计算数
tmp = 0; // 清除当前输入的操作数
txtBox.Text="0.";
break;
case "backspace": //清除最后输入数字的最后的位数
string showNumber;
showNumber=txtBox.Text;
if(txtBox.Text.Length>1)
{
txtBox.Text=showNumber.Substring(0,showNumber.Length-1);
tmp=double.Parse(txtBox.Text);
}
else
{
txtBox.Text="0.";
tmp=0;
}
break;
}
}
#endregion
#region 等于事件和等于事件的处理
private void btn_eql_Click(object sender, System.EventArgs e)
{
calc();
}
//等于的算法
private void calc()
{
if (num == 0 ) //判断是否有操作数,没有就返回0
{
res = 0;
tmp = 0;
txtBox.Text = res.ToString();
return;
}
switch (opt) //找到对应的运算符进行相应的计算
{
// 加法
case ADD:
res = res + tmp;
break;
// 减法
case SUB:
res = res - tmp;
break;
// 乘法
case MUL:
res = res * tmp;
break;
// 除法
case DIV:
res = res / tmp;
break;
// 求平方根
case SQRT:
res = System.Math.Sqrt(tmp);
break;
default:
return;
}
txtBox.Text = res.ToString(); //结果转换成字符形式输出到文本显示屏
//重要一步---每计算一次都要把中间量重设成初值,否则连续运算出现问题
opt = NULL; //运算符清空
tmp=0; //清空当前操作数,只有再次输入操作数才进行计算,否则保持原数
dot = NODOT; //新一次的计算,小数点的判断从新计算
}
#endregion
#region 菜单事件
//复制事件
private void menuItem_cop_Click(object sender, System.EventArgs e)
{
if(txtBox.SelectionLength>0)
{
txtBox.Copy();
}
}
//粘贴事件
private void menuItem_pas_Click(object sender, System.EventArgs e)
{
txtBox.Paste();
}
//打开关于“计算器”的主题--调用windows xp中计算器的帮助
private void menuItem_hsj_Click(object sender, System.EventArgs e)
{
Help.ShowHelp(this,"C:\\WINDOWS\\Help\\calc.chm");
}
//打开关于“计算器”
private void menuItem_abt_Click(object sender, System.EventArgs e)
{
Form2 fm2=new Form2();
fm2.Show();
}
#endregion
private void Form1_Load(object sender, System.EventArgs e)
{
}
private void txtBox_TextChanged(object sender, System.EventArgs e)
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -