Winform——计算器

namespace 计算器2._0

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        private bool Isok = true;//记录刚刚是否点过运算符,或是否第一次进入界面(用来存储判断是否刚刚点过运算符)

        private string Biaodashi; //记录运算符之前的表达式(在第一栏)

        private decimal Sum;//记录之前计算的结果(在第二栏)

        private string Preyunsuanfu;//记录之前的运算符

        private decimal d2;//存下面的数的成员变量





        private void button32_Click(object sender, EventArgs e)//其它数字按钮

        {

            Button btn = (Button) sender; //sender为各自对应的类,这里为对应每个按钮

            if (Isok) //如果第一次进入界面或者之前点过运算符

            {

                textBox2.Text = btn.Text; //下面那一栏文本框的内容改成按钮上的内容

                Isok = false;//将Isok改成false的意思:不是刚刚点完运算符了,也不是刚进入界面,是为了进入else

                d2 = decimal.Parse(textBox2.Text);

            }

            else

            {

                textBox2.Text = textBox2.Text + btn.Text;//如果不是刚进入,之后的数字便一直加上刚才所点的按钮的内容

            }

        }



        private void button36_Click(object sender, EventArgs e)//0按钮

        {

            Button btn = (Button)sender; //sender为各自对应的类,这里为对应每个按钮

            if (Isok) //如果第一次进入界面或者之前点过运算符

            {

                textBox2.Text = btn.Text; //下面那一栏文本框的内容改成按钮上的内容

                

            }

            else

            {

                textBox2.Text = textBox2.Text + btn.Text;//如果不是刚进入,之后的数字便一直加上刚才所点的按钮的内容

            }

        }



        private void button44_Click(object sender, EventArgs e)//运算符

        {

            Button btn = (Button)sender;//sender为各自对应的类,这里为对应每个按钮

            string yunsuanfu = btn.Text; //将按钮上的内容赋值给yunsuanfu;

            if (Preyunsuanfu == null)

            {

                Biaodashi =  textBox2.Text; 

                Sum = decimal.Parse(textBox2.Text);

            }

            else

            {

                if (!Isok) //如果刚刚点过运算符,这一块也就不需要运算了.反之则需要运算.

                {   // !Isok 代表的是刚刚没点过运算符,这样才会运算下面的代码.

                    if (Preyunsuanfu == "+") //如果刚才的运算符是加号

                    {

                        Sum = Sum + decimal.Parse(textBox2.Text);//算出的结果就为之前算出来的加上刚点上去的

                    }

                    if (Preyunsuanfu == "-")

                    {

                        Sum = Sum - decimal.Parse(textBox2.Text);

                    }

                    if (Preyunsuanfu == "*")

                    {

                        Sum = Sum * decimal.Parse(textBox2.Text);

                    }

                    if (Preyunsuanfu == "/")

                    {

                        Sum = Sum / decimal.Parse(textBox2.Text);

                    }

                    if (Preyunsuanfu == "%")

                    {

                        Sum = Sum % decimal.Parse(textBox2.Text);

                    }

                    Biaodashi = Biaodashi + Preyunsuanfu + textBox2.Text;//之前有运算符的话  第一栏的值变为  之前的表达式+刚才点进去的运算符+刚才输入的值

                    textBox2.Text = Sum.ToString(); //第二栏的值变为结果

                }

            

            }

            textBox1.Text = Biaodashi + yunsuanfu;//第一栏显示的文本为表达式+当前输入的运算符

            Preyunsuanfu = yunsuanfu;//将yunsuanfu的值赋给   记录上一次的运算符;

            Isok = true; //只要Isok是ture,就会把刚才的值清空重新输入现在按钮上的值



        }



        private void button8_Click(object sender, EventArgs e) //清空键

        {   //初始化所有状态

            textBox1.Text = "";

            textBox2.Text = "0";

            Isok = true;

            Preyunsuanfu = null;

            Sum = 0;

            Biaodashi = "";

            d2 = 0;

        }



        private void button6_Click(object sender, EventArgs e)//撤销键

        {

            if (!Isok) //如果刚刚没点过运算符才能执行下面这一步

            {

                if (textBox2.Text.Length == 1)//如果第二栏的文本长度为1

                {

                    textBox2.Text = "0"; //点击撤销就会变成0

                    Isok = true;//只要一撤成0,就将Isok改成true.  这样0才不会累加,相当于重新进入界面。

                }

                else

                {

                    textBox2.Text = textBox2.Text.Substring(0, textBox2.Text.Length - 1);

                }

            }

           

        }



        private void button28_Click(object sender, EventArgs e) //小数点

        { 

            if(!textBox2.Text.Contains("."))//之前有小数点了便不会执行下一步

            {

                textBox2.Text = textBox2.Text + ".";

                Isok = false;//不会清空第二行

            }

        }

      // private bool d3 = true;//是否点过其他数字

        private void button30_Click(object sender, EventArgs e) //等号    

       {

           Button btn = (Button)sender;

            

            textBox1.Text = ""; //第一栏为空 

           

            //计算之前的结果

            if (Preyunsuanfu == "+") //如果刚才的运算符是加号

            {

                Sum = Sum + decimal.Parse(textBox2.Text);//算出的结果就为之前算出来的加上刚点上去的

            }

            if (Preyunsuanfu == "-")

            {

                Sum = Sum - decimal.Parse(textBox2.Text);

            }

            if (Preyunsuanfu == "*")

            {

                Sum = Sum * decimal.Parse(textBox2.Text);

            }

            if (Preyunsuanfu == "/")

            {

                Sum = Sum / decimal.Parse(textBox2.Text);

            }

            if (Preyunsuanfu == "%")

            {

                Sum = Sum % decimal.Parse(textBox2.Text);

            }

          

            textBox2.Text = Sum.ToString();//第二栏显示为之前的结果



            

            //初始化对象

            Isok = true;

            Biaodashi = "";

            Preyunsuanfu = null;

          

            Sum = d2+decimal.Parse(textBox2.Text);



            //还没有继续点等号出现的情况

           

            

        }



        private void button9_Click(object sender, EventArgs e)  //正负号

        {

            if (!Isok) //不是刚点过运算符也不是刚进入界面,即如果是结果的话就不会执行下面的代码

            {

                if (decimal.Parse(textBox2.Text) > 0)

                {

                    textBox2.Text = "-" + textBox2.Text;//如果大于零就添加负号

                }

                else

                {

                    textBox2.Text = textBox2.Text.Substring(1);//如果小于零就把负号去掉

                }

            }

        }

        private string m;

        private void button4_Click(object sender, EventArgs e) //M+  将textbox2的值存到了M+里面

        {

            if (textBox2.Text == "0")

            {



            }

            else

            {

                textBox3.Text = "M";

            }

            m = textBox2.Text;

        }



        private void button2_Click(object sender, EventArgs e)//MR 点击MR显示M+保存的数;

        {

            textBox2.Text = m;

        }



        private void button5_Click(object sender, EventArgs e)//M- 之前M+保存的数减去你输入的数

        {

            if(!Isok)//不是刚刚点过运算符

            {

            Sum=decimal.Parse(m)-decimal.Parse(textBox2.Text);

            textBox2.Text = Sum.ToString();

            }

        }





        private double ss;

        private void button10_Click(object sender, EventArgs e)//根号

        {

           ss = Math.Sqrt(double.Parse(textBox2.Text));

           textBox1.Text = "sqrt" + "(" + textBox2.Text + ")";

           textBox2.Text = ss.ToString();

           Isok = true;

        }



        private void textBox2_TextChanged(object sender, EventArgs e)

        {



        }



        private void textBox1_TextChanged(object sender, EventArgs e)

        {



        }

        private double fenshu;

        private void button41_Click(object sender, EventArgs e)//几分之几

        {

            fenshu = 1 / double.Parse(textBox2.Text);  

            textBox1.Text = "reciproc" + "("+textBox2.Text+")";//第一栏显示的

            textBox2.Text = fenshu.ToString();//第二栏显示的

          

        }



        private void button7_Click(object sender, EventArgs e)//CE键和C键功能一样

        {

            //初始化所有状态

            textBox1.Text = "";

            textBox2.Text = "0";

            Isok = true;

            Preyunsuanfu = null;

            Sum = 0;

            Biaodashi = "";

        }



        private void button1_Click(object sender, EventArgs e) //MC 清空M+保存的值

        {

            textBox3.Text = "";

            m = "0";

        }



    }

}

 

你可能感兴趣的:(WinForm)