当前位置: 首页 > news >正文

8.8.1 简易计算器

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的

【例 8.64【项目:code8-064】一个简易计算器。

先考虑计算器的设计,窗体上控件的摆放可以参考windows自带的最基本那种计算器。下图是计算器控件摆放:

图8-107 计算器控件摆放

控件命名:

表8-1 计算器控件名称

控件名称

控件类型

文本

控件名称

控件类型

文本

txtValue

TextBox

0

btnClear

Button

C

btnBack

Button

<-

btnSquare

Button

X^2

btnAdd

Button

+

btnSub

Button

-

btnMul

Button

/

btnDiv

Button

*

btnNegPos

Button

+/-

btnDot

Button

.

btnEqual

Button

=

btnNum0-9

Button

0-9

txtValue的readonly属性设置为True;按钮的FlatStyle属性设置为Popup。

考虑到加减乘除运算符操作时差不多,所以合并使用一个事件,请在“Form1.Designer.cs”内添加或修改成如下内容:

 this.btnDiv.Click += new System.EventHandler(this.btnAdd_Click);

     this.btnMul.Click += new System.EventHandler(this.btnAdd_Click);

     this.btnSub.Click += new System.EventHandler(this.btnAdd_Click);

     this.btnAdd.Click += new System.EventHandler(this.btnAdd_Click);

同样,按下数字按键操作差不多,所以合并使用同一个事件,请在“Form1.Designer.cs”内添加或修改成如下内容:

 this.btnNum1.Click += new System.EventHandler(this.btnNum1_Click);

this.btnNum2.Click += new System.EventHandler(this.btnNum1_Click);

 ……

具体代码如下:

        //做运算的第一个数字

        Double numFirst;

        //做运算的第二个数字

        Double numSecond;

        //运算符号

        string operatesymbol;

        //当前是否做了计算

        bool blHasCalculate;

        //当前是否按下运算符

        bool blHasOperator;

        private void Form1_Load(object sender, EventArgs e)

        {

            blHasCalculate = false;

            blHasOperator = false;

        }

        //清除计算结果

        private void btnClear_Click(object sender, EventArgs e)

        {

            txtValue.Text = "0";

            operatesymbol = "";

            blHasCalculate = false;

            blHasOperator = false;

        }

        //删除最后一个数字

        private void btnBack_Click(object sender, EventArgs e)

        {

            if (txtValue.Text.Length == 1)

                txtValue.Text = "0";

            else if (txtValue.Text.Length > 1)

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

        }

        //按下平方按钮

        private void btnSquare_Click(object sender, EventArgs e)

        {

            Button btnclick = (Button)sender;

            numFirst = Double.Parse(txtValue.Text);

            Double dbValue;

            dbValue = numFirst * numFirst;

            string strValue = dbValue.ToString();

            txtValue.Text = strValue;

            blHasCalculate = true;

            blHasOperator = false;

        }

        //按下运算符按钮

        private void btnAdd_Click(object sender, EventArgs e)

        {

            Button btnclick = (Button)sender;

            if (blHasOperator == false)

            {

                numFirst = Double.Parse(txtValue.Text);

                operatesymbol = btnclick.Text;

                txtValue.Text = "0";

                blHasOperator = true;

            }

            else

                MessageBox.Show("请先按下等于号后继续计算");

        }

        //按下正负号按钮

        private void btnNegPos_Click(object sender, EventArgs e)

        {

            if (txtValue.Text.Substring(0, 1) == "-")

                txtValue.Text = txtValue.Text.Substring(1, txtValue.Text.Length - 1);

            else

                txtValue.Text = "-" + txtValue.Text;

        }

        //按下小数点

        private void btnDot_Click(object sender, EventArgs e)

        {

            if(txtValue.Text.IndexOf('.')<0)

                txtValue.Text += ".";

        }

        //按下等于按钮

        private void btnEqual_Click(object sender, EventArgs e)

        {

            numSecond = Double.Parse(txtValue.Text);

            Double dbValue=0;

            switch(operatesymbol)

            {

                case "+":

                    dbValue = numFirst + numSecond;

                    break;

                case "-":

                    dbValue = numFirst - numSecond;

                    break;

                case "*":

                    dbValue = numFirst * numSecond;

                    break;

                case "/":

                    if( numSecond == 0)

                    {

                        MessageBox.Show("除数不能为0!");

                        return;

                    }

                    dbValue = numFirst / numSecond;

                    break;

                default:

                    break;

            }

            blHasCalculate = true;

            blHasOperator = false;

            string strValue = dbValue.ToString();

            txtValue.Text = strValue;

        }

        //按下数字按钮

        private void btnNum1_Click(object sender, EventArgs e)

        {

            Button btnclick = (Button)sender;

            string addnumber = btnclick.Text;

            switch(txtValue.Text)

            {

                case "0":

                    txtValue.Text = addnumber;

                    break;

                case "-0":

                    txtValue.Text = "-" + addnumber;

                    break;

                default:

                    if (blHasCalculate == true)

                    {

                        txtValue.Text = addnumber;

                        blHasCalculate = false;

                    }

                    else

                        txtValue.Text += addnumber;

                    break;

              }

     }

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录

相关文章:

  • css一些注意事项
  • 【linux】使用LNMP环境+Discuz论坛源程序
  • Excel处理控件Aspose.Cells指南:使用 Python 删除 Excel 中的重复行
  • Web Worker 中的 DedicatedWorkerGlobalScope 对象
  • LeetCode hot 100—搜索二维矩阵
  • 单片机 + 图像处理芯片 + TFT彩屏 触摸开关控件 v1.2
  • C语言核心结构+难点精讲+工程技巧
  • LLM - Dify 平台介绍
  • linux多线(进)程编程——番外1:内存映射与mmap
  • Java万级并发场景-实战解决
  • AI大模型原理可视化工具:深入浅出理解大语言模型的工作原理
  • 机器学习02——RNN
  • 【2025年五一数学建模竞赛A题】完整思路和代码
  • 代码随想录动态规划part02
  • 【信息系统项目管理师】高分论文:论信息系统项目的范围管理(电网公司保供电可视化系统)
  • 图像处理算法面经1
  • 产品需求设计评审会:三步精准定位需求核心
  • std::enable_shared_from_this 模板类的作用是什么?
  • KEGG注释脚本kofam2kegg.py--脚本010
  • 小程序页面传值的多种方式
  • 美国参议院投票通过戴维·珀杜出任美国驻华大使
  • 今年一季度全国城镇新增就业308万人,就业形势保持总体稳定
  • 成都世运会倒计时100天,中国代表团运动员规模将创新高
  • 普京发表声明感谢协助俄军收复库尔斯克州的朝鲜军人
  • 深一度|“凑合过”的利物浦,英超第二冠只求性价比
  • 视频丨伊朗港口爆炸事件灭火工作已完成80%