C#编程基础(下)—项目实践4:使用C#开发完整版计算器(点击数字和计算符,输出计算结果,带小数点和清零效果)

版权声明:王迪 https://blog.csdn.net/dnruanjian/article/details/88839849

知识点:基本控件的使用、计算器窗体设计、简单if结构语句的使用。

实现效果:完整计算器界面,任意点选数字,实现基础数学运算。

实现步骤:

第一步:项目实践3演示的项目MyCounter中,新添加一个窗体,设置窗体的Text属性为“完整版计算器”。

第二步:添加一个TextBox控件到窗体上,并设置TextAlign属性为right,让文本居右对齐。

添加按钮控件到窗体上,并设置好对应的Text属性,同时调整好按钮控件的顺序。(为了后面操作方便,我们按照控件拖入的顺序,依次设置其Text属性为1——9、等,也就是说将按钮控件的Name顺序和其Text显示的数字序号一一对应。)

第三步:进入窗体的代码模式,添加两行代码:

int op = 0; //声明一个整型变量,用来存放运算符号(用数字1/2/3/4等分别代表加减乘除,如加号是1,减号是2……)

double num1, num2, jieguo; //声明三个变量,用来存放操作数和结果。

扫描二维码关注公众号,回复: 5890963 查看本文章

第四步:依次给运算符号添加事件。

方法:在窗体设计界面,双击加号按钮,进入代码编写模式,添加两行代码:

op = 1;//当用户点击加号时,将数字1赋值给变量op
textBox1.Text = "";//同时,清空textBox1里的文本内容

依次给其他运算符号按钮添加事件,注意不同运算符号,对应不同的数字。

        private void button13_Click(object sender, EventArgs e)//加号按钮+
        {
            op = 1;//当用户点击加号时,将数字1赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button14_Click(object sender, EventArgs e)//减号按钮-
        {
            op = 2;//当用户点击减号时,将数字2赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button15_Click(object sender, EventArgs e)//乘号按钮*
        {
            op = 3;//当用户点击乘号时,将数字3赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button16_Click(object sender, EventArgs e)//除号按钮/
        {
            op = 4;//当用户点击除号时,将数字4赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button17_Click(object sender, EventArgs e)//平方按钮x²
        {
            op = 5;//当用户点击平方号时,将数字5赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button18_Click(object sender, EventArgs e)//开方按钮√
        {
            op = 6;//当用户点击开方号时,将数字6赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button19_Click(object sender, EventArgs e)//取模按钮%
        {
            op = 7;//当用户点击取模按钮时,将数字7赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button20_Click(object sender, EventArgs e)//取清零按钮C
        {
            op = 0;//当用户点击清零按钮时,将数字0赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

第五步:给等号按钮添加点击事件。这里用一个switch判断,判断用户点击的是哪个操作符号,并计算出结果。然后将结果信息强制转换成string类型后,赋值给TextBox输入框。

        private void button12_Click(object sender, EventArgs e)//等号按钮=
        {
            switch (op)
            {
                case 1://加号运算符
                    jieguo = num1 + num2;
                    break;
                case 2://减号运算符
                    jieguo = num1 - num2;
                    break;
                case 3://乘号运算符
                    jieguo = num1 * num2;
                    break;
                case 4://除号运算符
                    jieguo = num1 / num2;
                    break;
                case 5://平方运算符
                    jieguo =Math.Pow(num1,2);
                    break;
                case 6://开方运算符
                    jieguo =Math.Sqrt(num1);
                    break;
                case 7://取模运算符
                    jieguo = num1 % num2;
                    break;
                case 0://清零运算符
                    jieguo = 0;
                    break;
            }
            textBox1.Text = Convert.ToString(jieguo);//将最终运算结果,强制转换成string类型后,赋值给TextBox1的文本属性
            op = 0;//显示结果以后,将运算符变量op恢复到最初状态
    }

第六步:依次给数字按钮,添加事件。方法:双击对应的数字按钮0——9和小数点,进入代码编写模式,添加代码。

        private void button1_Click(object sender, EventArgs e)//数字1按钮的点击事件
        {
            textBox1.Text = textBox1.Text + "1";//将数字1显示在TextBox输入框里,因为输入框默认的Text类型是string类型
            if (op == 0)//判断当前运算符号,如果是0,那么代表还没有点击运算符,即当前数字是num1
            {
               num1 = Convert.ToDouble(textBox1.Text);
            }
            else
            {
               num2= Convert.ToDouble(textBox1.Text);
            }
        }

程序完整版代码:

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 MyCounter
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        //声明一个变量,用来存放运算符号(如加号是1,减号是2……)
        int op = 0;
        //声明三个变量,用来存放操作数和结果
        double num1, num2, jieguo;

        private void button13_Click(object sender, EventArgs e)//加号按钮+
        {
            op = 1;//当用户点击加号时,将数字1赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button14_Click(object sender, EventArgs e)//减号按钮-
        {
            op = 2;//当用户点击减号时,将数字2赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button15_Click(object sender, EventArgs e)//乘号按钮*
        {
            op = 3;//当用户点击乘号时,将数字3赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button16_Click(object sender, EventArgs e)//除号按钮/
        {
            op = 4;//当用户点击除号时,将数字4赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button17_Click(object sender, EventArgs e)//平方按钮x²
        {
            op = 5;//当用户点击平方号时,将数字5赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button18_Click(object sender, EventArgs e)//开方按钮√
        {
            op = 6;//当用户点击开方号时,将数字6赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }
        private void button19_Click(object sender, EventArgs e)//取模按钮%
        {
            op = 7;//当用户点击取模按钮时,将数字7赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }

        private void button20_Click(object sender, EventArgs e)//取清零按钮C
        {
            op = 0;//当用户点击清零按钮时,将数字0赋值给变量op
            textBox1.Text = "";//同时,清空textBox1里的文本内容
        }
        private void button12_Click(object sender, EventArgs e)//等号按钮=
        {
            switch (op)
            {
                case 1://加号运算符
                    jieguo = num1 + num2;
                    break;
                case 2://减号运算符
                    jieguo = num1 - num2;
                    break;
                case 3://乘号运算符
                    jieguo = num1 * num2;
                    break;
                case 4://除号运算符
                    jieguo = num1 / num2;
                    break;
                case 5://平方运算符
                    jieguo =Math.Pow(num1,2);
                    break;
                case 6://开方运算符
                    jieguo =Math.Sqrt(num1);
                    break;
                case 7://取模运算符
                    jieguo = num1 % num2;
                    break;
                case 0://清零运算符
                    jieguo = 0;
                    break;
            }
            textBox1.Text = Convert.ToString(jieguo);//将最终运算结果,强制转换成string类型后,赋值给TextBox1的文本属性
            op = 0;//显示结果以后,将运算符变量op恢复到最初状态
        }

        private void button1_Click(object sender, EventArgs e)//数字1按钮的点击事件
        {
            textBox1.Text = textBox1.Text + "1";//将数字1显示在TextBox输入框里,因为输入框默认的Text类型是string类型
            if (op == 0)//判断当前运算符号,如果是0,那么代表还没有点击运算符,即当前数字是num1
            {
               num1 = Convert.ToDouble(textBox1.Text);
            }
            else
            {
               num2= Convert.ToDouble(textBox1.Text);
            }
        }

        private void button2_Click(object sender, EventArgs e)//数字2按钮的点击事件
        {
            textBox1.Text = textBox1.Text + "2";
            if (op == 0)
            {
                num1 = Convert.ToDouble(textBox1.Text);
            }
            else
            {
                num2 = Convert.ToDouble(textBox1.Text);
            }
        }

        private void button3_Click(object sender, EventArgs e)//数字3按钮的点击事件
        {
            textBox1.Text = textBox1.Text + "3";
            if (op == 0)
            {
                num1 = Convert.ToDouble(textBox1.Text);
            }
            else
            {
                num2 = Convert.ToDouble(textBox1.Text);
            }
        }

        private void button4_Click(object sender, EventArgs e)//数字4按钮的点击事件
        {
            textBox1.Text = textBox1.Text + "4";
            if (op == 0)
            {
                num1 = Convert.ToDouble(textBox1.Text);
            }
            else
            {
                num2 = Convert.ToDouble(textBox1.Text);
            }
        }

        private void button5_Click(object sender, EventArgs e)//数字5按钮的点击事件
        {
            textBox1.Text = textBox1.Text + "5";
            if (op == 0)
            {
                num1 = Convert.ToDouble(textBox1.Text);
            }
            else
            {
                num2 = Convert.ToDouble(textBox1.Text);
            }
        }

        private void button6_Click(object sender, EventArgs e)//数字6按钮的点击事件
        {
            textBox1.Text = textBox1.Text + "6";
            if (op == 0)
            {
                num1 = Convert.ToDouble(textBox1.Text);
            }
            else
            {
                num2 = Convert.ToDouble(textBox1.Text);
            }
        }

        private void button7_Click(object sender, EventArgs e)//数字7按钮的点击事件
        {
            textBox1.Text = textBox1.Text + "7";
            if (op == 0)
            {
                num1 = Convert.ToDouble(textBox1.Text);
            }
            else
            {
                num2 = Convert.ToDouble(textBox1.Text);
            }
        }

        private void button8_Click(object sender, EventArgs e)//数字8按钮的点击事件
        {
            textBox1.Text = textBox1.Text + "8";
            if (op == 0)
            {
                num1 = Convert.ToDouble(textBox1.Text);
            }
            else
            {
                num2 = Convert.ToDouble(textBox1.Text);
            }
        }

        private void button9_Click(object sender, EventArgs e)//数字9按钮的点击事件
        {
            textBox1.Text = textBox1.Text + "9";
            if (op == 0)
            {
                num1 = Convert.ToDouble(textBox1.Text);
            }
            else
            {
                num2 = Convert.ToDouble(textBox1.Text);
            }
        }

        private void button10_Click(object sender, EventArgs e)//数字0按钮的点击事件
        {
            textBox1.Text = textBox1.Text + "0";
            if (op == 0)
            {
                num1 = Convert.ToDouble(textBox1.Text);
            }
            else
            {
                num2 = Convert.ToDouble(textBox1.Text);
            }
        }

        private void button11_Click(object sender, EventArgs e)//数符号.按钮的点击事件
        {
            textBox1.Text = textBox1.Text + ".";
            if (op == 0)
            {
                num1 = Convert.ToDouble(textBox1.Text);
            }
            else
            {
                num2 = Convert.ToDouble(textBox1.Text);
            }
        }
    }
}

思考1:以上代码如何优化?

思考2:如何实现计算器的连续运算?(连续加减等)

思考3:如何实现计算器的退格功能?

===C#窗体技巧1:设置TextBox输入框只有底部有边框线

怎么设置TextBox输入框没有边框?如何设置TextBox输入框只有底部有边框线?可以重写TextBox的类,但是此方法比较麻烦,可以通过设置TextBox控件的属性,并结合Label控件做一个视觉上的效果。

实现方法:

第一步:设置TextBox控件的BorderStyle属性为None。此时TextBox控件没有边框线。

第二步:添加一个Label控件,设置其宽度和TextBox控件的宽度一致,设置其高度为1。设置BorderStyle属性为FixedSingle

第三步:取消输入框里的背景色。设置TextBox控件的BackColor属性值和窗体的BackColor属性值一致即可。

===C#窗体技巧2:设置Button按钮没有边框,鼠标滑过按钮时背景颜色发生变化

实现方法:

第一步:设置按钮Button控件的FlatStyle属性为Flat,并且设置FlatAppearance下的BorderSize为0。同时给按钮设置一个BackColor属性,即设置背景颜色。

第二步:分别给按钮添加MouseHover事件和MouseLeave事件。方法:在窗体设计界面,选中按钮后,在属性面板【事件】中,找到对应的事件名称,双击即可进入代码编写模式。

MouseHover事件添加代码: button1.BackColor = Color.FromArgb(255, 0, 0);

MouseLeave事件添加代码:button1.BackColor = Color.FromArgb(255, 192, 192);

完整代码:

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 MyCounter
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
        //鼠标滑动到按钮上时,执行该事件
        private void button1_MouseHover(object sender, EventArgs e)
        {
            //设置按钮的背景颜色
            button1.BackColor = Color.FromArgb(255, 0, 0);
        }
        //鼠标离开按钮上时,执行该事件
        private void button1_MouseLeave(object sender, EventArgs e)
        {
            //一般将鼠标离开后,按钮的背景颜色,设置为按钮原有背景颜色一致(即在窗体设计界面,设置按钮的BackColor属性)
            button1.BackColor = Color.FromArgb(255, 192, 192);
        }
    }
}

结果演示:按钮没有边框,默认背景色粉丝,当鼠标滑过按钮时,背景变成红色,鼠标离开按钮后,背景又变回粉色。

  

===================这里是结束分割线======================

猜你喜欢

转载自blog.csdn.net/dnruanjian/article/details/88839849