前面,使用winform实现了个简单的计算器,今天,再来给大家看一个稍微复杂点的计算器,效果图如下:
包括归零,退格,加减乘除都已经实现,如果想要继续扩展的可以在稍微改改即可。
现在看看怎么实现的:
1.先从工具箱里面拉出来一个这样的窗体:
2.归零的方法:
private void qingchu_Click(object sender, EventArgs e) { this.lbljieguo.Text = "0"; sb = new StringBuilder(""); }
3.退格的方法:
//退格的按钮 private void tuige_Click(object sender, EventArgs e) { //判断当前能不能点击退格 //判断显示框是否有值,有值的话可以删除,没有值的话提示不能删除 if (this.lbljieguo.Text.Length > 0) { char ch = 'a'; //保存符号 //遍历字符串 foreach (char c in sb.ToString()) { ch = c; //最后一个值放在ch里面 } //判断最后一个是否是+-*/% if (ch != '+') { //如果是,不能动num1和num2,否则可以动 if (flag == false) { num1 = new StringBuilder(num1.ToString().Substring(0, num1.Length - 1)); } else { num2 = new StringBuilder(num2.ToString().Substring(0, num2.Length - 1)); } } ji = false; this.lbljieguo.Text = sb.ToString().Substring(0, this.lbljieguo.Text.Length - 1); sb = new StringBuilder(this.lbljieguo.Text); } else { MessageBox.Show("显示框都没有值,你删啥?", "提示信息"); } }
4.(1 2 3 4 5 6 7 8 9 0)的点击事件:
//第一个数 StringBuilder num1 = new StringBuilder(); //第二个数 StringBuilder num2 = new StringBuilder(); //判断是否是第一次输入 bool flag = false; //运算符 string fu = ""; //当计算完结果时,不能退格 bool ji = false; StringBuilder sb = new StringBuilder(); //7 private void btn7_Click(object sender, EventArgs e) { if (flag == false) { num1.Append(7); } else { num2.Append(7); } sb.Append(7); this.lbljieguo.Text = sb.ToString(); } //8 private void btn8_Click(object sender, EventArgs e) { if (flag == false) { num1.Append(8); } else { num2.Append(8); } sb.Append(8); this.lbljieguo.Text = sb.ToString(); } private void btn9_Click(object sender, EventArgs e) { if (flag == false) { num1.Append(9); } else { num2.Append(9); } sb.Append(9); this.lbljieguo.Text = sb.ToString(); } private void btn4_Click(object sender, EventArgs e) { if (flag == false) { num1.Append(4); } else { num2.Append(4); } sb.Append(4); this.lbljieguo.Text = sb.ToString(); } private void btn5_Click(object sender, EventArgs e) { if (flag == false) { num1.Append(5); } else { num2.Append(5); } sb.Append(5); this.lbljieguo.Text = sb.ToString(); } private void btn6_Click(object sender, EventArgs e) { if (flag == false) { num1.Append(6); } else { num2.Append(6); } sb.Append(6); this.lbljieguo.Text = sb.ToString(); } private void btn1_Click(object sender, EventArgs e) { if (flag == false) { num1.Append(1); } else { num2.Append(1); } sb.Append(1); this.lbljieguo.Text = sb.ToString(); } private void btn2_Click(object sender, EventArgs e) { if (flag == false) { num1.Append(2); } else { num2.Append(2); } sb.Append(2); this.lbljieguo.Text = sb.ToString(); } private void btn3_Click(object sender, EventArgs e) { if (flag == false) { num1.Append(3); } else { num2.Append(3); } sb.Append(3); this.lbljieguo.Text = sb.ToString(); } private void btn0_Click(object sender, EventArgs e) { if (flag == false) { num1.Append(0); } else { num2.Append(0); } sb.Append(0); this.lbljieguo.Text = sb.ToString(); }
5.加减乘除的点击事件:
private void btnchu_Click(object sender, EventArgs e) { flag = true; sb.Append("/"); this.lbljieguo.Text = sb.ToString(); fu = "/"; } private void btnyu_Click(object sender, EventArgs e) { flag = true; sb.Append("%"); this.lbljieguo.Text = sb.ToString(); fu = "%"; } private void btnjia_Click(object sender, EventArgs e) { flag = true; sb.Append("+"); this.lbljieguo.Text = sb.ToString(); fu = "+"; } private void btnjian_Click(object sender, EventArgs e) { flag = true; sb.Append("-"); this.lbljieguo.Text = sb.ToString(); fu = "-"; } private void btncheng_Click(object sender, EventArgs e) { flag = true; sb.Append("*"); this.lbljieguo.Text = sb.ToString(); fu = "*"; }
6.等于的方法:
//等于的按钮 private void btndeng_Click(object sender, EventArgs e) { //string xianshi = sb.ToString(); switch (fu) { case "+": this.lbljieguo.Text = (int.Parse(num1.ToString()) + int.Parse(num2.ToString())).ToString(); break; case "-": this.lbljieguo.Text = (int.Parse(num1.ToString()) - int.Parse(num2.ToString())).ToString(); break; case "*": this.lbljieguo.Text = (int.Parse(num1.ToString()) * int.Parse(num2.ToString())).ToString(); break; case "/": this.lbljieguo.Text = (int.Parse(num1.ToString()) / int.Parse(num2.ToString())).ToString(); break; case "%": this.lbljieguo.Text = (int.Parse(num1.ToString()) % int.Parse(num2.ToString())).ToString(); break; } num1 = new StringBuilder(""); num2 = new StringBuilder(""); sb = new StringBuilder(""); flag = false; ji = true; //显示的是结果 }
整个的实现方法以及代码都已经给出,不做伸手党,自己动脑思考思考,加油啊,在编码路上的你们~~