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.只支持整型数据运算,还不能进行浮点运算