C#实现按键计算器功能
(一次失败的编程)
界面:
代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace 按键计算器 { public partial class Form1 : Form { //flag1表示开始输入数字时,该数的位数 //flag2表示在此时运算符(+ - */)的个数 //flag3在输入运算符时用于判断,表示在输入运算符时,前一个运算符为+时等于1, -为2 *为3 /为4 int flag1 =0,flag2=0,flag3=5; //isEqual表示该状态时是否点击了等于按钮 bool isEqual =false; //isClear表示是否清空了主输入编辑框里的数据 bool isClear = true; //isError表示是否出现错误,数据溢出,该部分还未完善 bool isError = false; //输入等于号的个数,这里程序后面会控制在0和1之间,多余的输入无效 int numEqual = 0; //m表示进行计算的第一个数,n表示进行计算的第二个数,一般第一次计算结束后会把结果存储在result中, int m = 0, n = 0,result=0; public Form1() { InitializeComponent(); } //将键盘与按钮关联 protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { if (keyData == Keys.NumPad1||keyData==Keys.D1) { this.btn1.Focus(); this.btn1.PerformClick(); } if (keyData == Keys.NumPad2 || keyData == Keys.D2) { this.btn2.Focus(); this.btn2.PerformClick(); } if (keyData == Keys.NumPad3 || keyData == Keys.D3) { this.btn3.Focus(); this.btn3.PerformClick(); } if (keyData == Keys.NumPad4 || keyData == Keys.D4) { this.btn4.Focus(); this.btn4.PerformClick(); } if (keyData == Keys.NumPad5 || keyData == Keys.D5) { this.btn5.Focus(); this.btn5.PerformClick(); } if (keyData == Keys.NumPad6 || keyData == Keys.D6) { this.btn6.Focus(); this.btn6.PerformClick(); } if (keyData == Keys.NumPad7 || keyData == Keys.D7) { this.btn7.Focus(); this.btn7.PerformClick(); } if (keyData == Keys.NumPad8 || keyData == Keys.D8) { this.btn8.Focus(); this.btn8.PerformClick(); } if (keyData == Keys.NumPad9 || keyData == Keys.D9) { this.btn9.Focus(); this.btn9.PerformClick(); } if (keyData == Keys.NumPad0 || keyData == Keys.D0) { this.btn0.Focus(); this.btn0.PerformClick(); } if (keyData == Keys.Add) { this.btnadd.Focus(); this.btnadd.PerformClick(); } if (keyData == Keys.Subtract || keyData == Keys.OemMinus) { this.btnsub.Focus(); this.btnsub.PerformClick(); } if (keyData == Keys.Multiply) { this.btnmul.Focus(); this.btnmul.PerformClick(); } if (keyData == Keys.Divide) { this.btndiv.Focus(); this.btndiv.PerformClick(); } if (keyData == Keys.Enter || keyData == Keys.Oemplus) { this.btnequ.Focus(); this.btnequ.PerformClick(); } if (keyData == Keys.Back) { this.btncle.Focus(); this.btncle.PerformClick(); } return base.ProcessCmdKey(ref msg, keyData); } private void btn1_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "1"; textBox2.Text = textBox2.Text + "1"; flag1++; } private void btn2_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "2"; textBox2.Text = textBox2.Text + "2"; flag1++; } private void btn3_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "3"; textBox2.Text = textBox2.Text + "3"; flag1++; } private void btn4_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "4"; textBox2.Text = textBox2.Text + "4"; flag1++; } private void btn5_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "5"; textBox2.Text = textBox2.Text + "5"; flag1++; } private void btn6_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "6"; textBox2.Text = textBox2.Text + "6"; flag1++; } private void btn7_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "7"; textBox2.Text = textBox2.Text + "7"; flag1++; } private void btn8_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "8"; textBox2.Text = textBox2.Text + "8"; flag1++; } private void btn9_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "9"; textBox2.Text = textBox2.Text + "9"; flag1++; } private void btn0_Click(object sender, EventArgs e) { if (isEqual) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; isEqual = false; numEqual = 0; } if (flag1 == 0) textBox2.Text = ""; textBox1.Text = textBox1.Text + "0"; textBox2.Text = textBox2.Text + "0"; flag1++; } private void btnf_Click(object sender, EventArgs e) { // textBox1.Text = textBox1.Text + "."; } private void btnadd_Click(object sender, EventArgs e) { flag2++; if (isEqual) { isEqual = false; textBox1.Text = ""; textBox1.Text = result.ToString(); } if (flag1!=0) { textBox1.Text = textBox1.Text + "+"; if (flag2 == 1) { m = int.Parse(textBox2.Text); textBox2.Text=""; flag1 = 0; flag2=1; flag3 = 1; isClear = false; } if (flag2 == 2) { if (flag1 != 0) { n = int.Parse(textBox2.Text); switch(flag3) { case 1: m = m + n; break; case 2: m = m - n; break; case 3: m = m * n; break; case 4: m = m / n; break; } textBox2.Text=""; textBox2.Text = m.ToString(); flag1 = 0; flag2 = 1; flag3 = 1; } } } } private void textBox1_TextChanged(object sender, EventArgs e) { } private void btnmul_Click(object sender, EventArgs e) { flag2++; if (isEqual) { isEqual = false; textBox1.Text = ""; textBox1.Text = result.ToString(); } if (flag1 != 0) { textBox1.Text = textBox1.Text + "*"; if (flag2 == 1) { m = int.Parse(textBox2.Text); textBox2.Text = ""; flag1 = 0; flag2 = 1; flag3 = 3; isClear = false; } if (flag2 == 2) { if (flag1 != 0) { n = int.Parse(textBox2.Text); switch (flag3) { case 1: m = m + n; break; case 2: m = m - n; break; case 3: m = m * n; break; case 4: m = m / n; break; } if(isEqual) textBox2.Text = ""; textBox2.Text = m.ToString(); flag1 = 0; flag2 = 1; flag3 = 3; } } } } private void btndiv_Click(object sender, EventArgs e) { flag2++; if (isEqual) { isEqual = false; textBox1.Text = ""; textBox1.Text = result.ToString(); } if (flag1 != 0) { textBox1.Text = textBox1.Text + "/"; if (flag2 == 1) { m = int.Parse(textBox2.Text); textBox2.Text = ""; flag1 = 0; flag2 = 1; flag3 = 4; isClear = false; } if (flag2 == 2) { if (flag1 != 0) { n = int.Parse(textBox2.Text); switch (flag3) { case 1: m = m + n; break; case 2: m = m - n; break; case 3: m = m * n; break; case 4: m = m / n; break; } textBox2.Text = ""; textBox2.Text = m.ToString(); flag1 = 0; flag2 = 1; flag3 = 4; } } } } private void btnsub_Click(object sender, EventArgs e) { flag2++; if (isEqual) { isEqual = false; textBox1.Text = ""; textBox1.Text = result.ToString(); } if (flag1 != 0) { textBox1.Text = textBox1.Text + "-"; if (flag2 == 1) { m = int.Parse(textBox2.Text); textBox2.Text = ""; flag1 = 0; flag2 = 1; flag3=2; } if (flag2 == 2) { if (flag1 != 0) { n = int.Parse(textBox2.Text); switch (flag3) { case 1: m = m + n; break; case 2: m = m - n; break; case 3: m = m * n; break; case 4: m = m / n; break; } textBox2.Text = ""; textBox2.Text = m.ToString(); flag1 = 0; flag2 = 1; flag3 = 2; } } } } private void btnequ_Click(object sender, EventArgs e) { if (flag1 != 0) { if (numEqual == 0) { textBox1.Text = textBox1.Text + "="; numEqual++; } n = int.Parse(textBox2.Text); switch (flag3) { case 1: m = m + n; break; case 2: m = m - n; break; case 3: m = m * n; break; case 4: m = m / n; break; } if (flag2 == 0) { if (numEqual == 1) { m = int.Parse(textBox2.Text); } } textBox2.Text = m.ToString(); result = m; flag1 = 1; flag2 = 0; flag3 = 5; isEqual = true; } } private void btncle_Click(object sender, EventArgs e) { textBox1.Text = ""; textBox2.Text = ""; flag1 = 0; flag2 = 0; flag3 = 0; numEqual = 0; isClear = true; } } }
运行结果:
不足:1.未处理数据溢出的情况
2.只支持整型数据运算,还不能进行浮点运算