本文共 10710 字,大约阅读时间需要 35 分钟。
using System;using System.Collections.Generic;using System.Collections;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication1{ public partial class equ : Form //类equ的起点 { public equ() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void textBox1_TextChanged(object sender, EventArgs e) { this.textBox1.SelectionStart = this.textBox1.Text.Length; this.textBox1.SelectionLength = 0; this.textBox1.ScrollToCaret(); } //---按键绑定-------------------- private void equ_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '1') { addNum("1"); } if (e.KeyChar == '2') { addNum("2"); } if (e.KeyChar == '3') { addNum("3"); } if (e.KeyChar == '4') { addNum("4"); } if (e.KeyChar == '5') { addNum("5"); } if (e.KeyChar == '6') { addNum("6"); } if (e.KeyChar == '7') { addNum("7"); } if (e.KeyChar == '8') { addNum("8"); } if (e.KeyChar == '9') { addNum("9"); } if (e.KeyChar == '0') { addNum("0"); } if (e.KeyChar == '+') { ways[index] = '+'; listway.Add('+'); selectways('+'); } if (e.KeyChar == '-') { ways[index] = '-'; listway.Add('-'); selectways('-'); } if (e.KeyChar == '*') { ways[index] = '*'; listway.Add('*'); selectways('*'); } if (e.KeyChar == '/') { ways[index] = '/'; listway.Add('/'); selectways('/'); } if (e.KeyChar == '=') { answer(); } if (e.KeyChar == 27) { Clear (); } } //成员变量 string numstr = ""; string num_answer="" ; char[] ways=new char [20] ; // 运算方式标志 double[] num = new double[20]; int index = 0; Listlistnum =new List (); //默认容量4个 List listway = new List (); int calflag1 = 0; // + - 标志位 int equflag2 = 0; // =标志 //只加数字和.方法addNum public void addNum(string num) //方法 string + { if (calflag1 == 1 && equflag2 == 1) //第二行计算,包括清零 { textBox1.Text += "\r\n"; //clear清屏,这里换行 num_answer = ""; numstr = ""; index =0; calflag1 = 0; equflag2 = 0; } textBox1.Text += num; numstr += num; } private void button1_Click_1(object sender, EventArgs e) { addNum("1"); } private void button2_Click_1(object sender, EventArgs e) { addNum("2"); } private void button3_Click_1(object sender, EventArgs e) { addNum("3"); } private void button4_Click_1(object sender, EventArgs e) { addNum("4"); } private void button5_Click_1(object sender, EventArgs e) { addNum("5"); } private void button6_Click_1(object sender, EventArgs e) { addNum("6"); } private void button7_Click_1(object sender, EventArgs e) { addNum("7"); } private void button8_Click_1(object sender, EventArgs e) { addNum("8"); } private void button9_Click_1(object sender, EventArgs e) { addNum("9"); } private void button10_Click_1(object sender, EventArgs e) { addNum("0"); } private void button11_Click(object sender, EventArgs e) // . { addNum("."); } //+ private void button13_Click_1(object sender, EventArgs e) { ways[index] = '+'; listway.Add('+'); selectways('+'); } //- private void button14_Click_1(object sender, EventArgs e) { ways[index] = '-'; listway.Add('-'); selectways('-'); } //* private void button15_Click_1(object sender, EventArgs e) { ways[index] = '*'; listway.Add('*'); selectways('*'); } // / private void button16_Click_1(object sender, EventArgs e) { ways[index] = '/'; listway.Add('/'); selectways('/'); } //计算符号 private void button12_Click(object sender, EventArgs e) //= { answer(); } private void button17_Click(object sender, EventArgs e) //清零 { Clear(); } private void button18_Click(object sender, EventArgs e) //退格键, 不需要处理集合数据 { if (equflag2 == 0) //出现= 不能退 { if (textBox1.Text.Length > 0) { if (textBox1.Text.EndsWith("+") || textBox1.Text.EndsWith("-") || textBox1.Text.EndsWith("*") || textBox1.Text.EndsWith("/")) { textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1); } else { textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1);//移除当前实例中的所有字符,从指定位置开始,一直到最后一个位置为止,并返回字符串。 numstr = numstr.Remove(numstr.Length - 1); } } } } public void selectways(char ways) //方法 string + { //已有方法时候不再增加+- if (textBox1.Text.EndsWith("+") || textBox1.Text.EndsWith("-") || textBox1.Text.EndsWith("*") || textBox1.Text.EndsWith("/")) { textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1); textBox1.Text += ways; listway.RemoveAt(index -1); //MessageBox.Show(":"+listway .Capacity ); } else { if (numstr.Length > 0) { // num[index] = Convert.ToDouble(numstr); listnum.Add(Convert.ToDouble(numstr)); index++; numstr = ""; switch (ways) { case '+': textBox1.Text += "+"; break; case '-': textBox1.Text += "-"; break; case '*': textBox1.Text += "*"; break; case '/': textBox1.Text += "/"; break; } calflag1 = 1; equflag2 = 0; } } } private double cal(double i, double j, char k) { switch (k) { case '+': return i + j; case '-': return i - j; case '*': return i * j; case '/': return i / j; default: return 00000000000; } // MessageBox.Show("k="+k); } private void answer() //计算 { textBox1.Text += "="; double result=0.0; try { // num[index] = Convert.ToDouble(numstr); listnum.Add(Convert.ToDouble(numstr)); index++; } catch { textBox1.Text = "请输入第二个数"; } //MessageBox.Show("ways:" + ways[0] +"/n" + ";num1:" + num[0] + ";num2:" + num[1] + ";num_answer :" + num_answer + "; numstr:" + numstr); //提示框 try { // result = num[0]; result = listnum[0]; for (int i = 0; i < index-1; i++) { // char aa = ways[i]; char aa = listway [i]; // MessageBox.Show("aa=" + aa); result = cal(result , listnum[i+1], aa); } num_answer = result.ToString(); textBox1.Text += num_answer; } catch { textBox1.Text = "error"; } equflag2 = 1; //等号自己的标志 numstr = ""; listnum.Clear(); listway.Clear(); } private void Clear() { textBox1.Text = ""; num_answer = ""; numstr = ""; calflag1 = 0; equflag2 = 0; index =0; listnum.Clear(); listway.Clear(); } }}// MessageBox.Show("aa=" + aa);//public bool EndsWith( string value ) 判断 string 对象的结尾是否匹配指定的字符串。//快速删除一行Shift+delete//if (caseflag3 == 1) //不换行接着计算//{ // num2_str += num;//}//else//{ // if (equflag2 == 0) //等号标志// { // if (calflag1 == 0) //没有按计算方法,给第一个变量// { // num1_str = num1_str + num;// }// else //按下计算方法后,数字赋给第二个变量// { // num2_str += num;// }// }//} //if (calflag1 == 1 && equflag2 == 0) //没有等号下,按运算符//{ // num2_str = numstr;// double temp1 = Convert.ToDouble(num1_str);// double temp2 = Convert.ToDouble(num2_str);// switch (ways)// { // case 1:// num_answer = (temp1 + temp2).ToString();// break;// case 2:// num_answer = (temp1 - temp2).ToString();// break;// case 3:// num_answer = (temp1 * temp2).ToString();// break;// case 4:// num_answer = (temp1 / temp2).ToString();// break;// }// equflag2 = 1; //等号自己的标志// num1_str = "";// num2_str = "";// numstr = "";//}