C#winform第一个小程序——简易计算器

C#实践开发_Winform 系列二:简易计算器 简易计算器 文章目录简易计算器前言一、结果呈现1. 界面设计二、源码1.Form.cs2.Form.Designer.cs三、总结 前言 C#实践开发_Winform 系列第二篇:简单计算器,掌握数组控件使用,实现简单加减乘除功能。 一、结果呈现 1. 界面设计 窗体界面设计:两个控件数组(一个数字按钮控件数组(BT_NUM),一个操作符控件数组(Operate)),一个文本框textBox(输入内容,并显示结果)。 ![在这里插入图片描述](https://img-blog.csdnim 阅读详情

  分享我的第一个完整的C#winform小程序,只为记录!
  
  写这个小程序的时候,我连语法还都不怎么会,只能边写边学,拖控件、设置属性也还是临时学会的。所以会有比较大的缺陷,而且使用的语法都是比较简单的,没有涉及稍微复杂一点点的代码。因为初学,所以很多地方不完善,已经做到当时尽可能的最好了。
  
  写这个程序的时候一开始真的是一点头绪都没有的,当时一片空白,无从下手,但是最终做出来之后那种自豪感是不言而喻的。
  
  首先上界面图:
  这里写图片描述
  
  先把各控件全部拖放好,排列整齐,为了美观,背景什么的稍微做了点改动,不至于太过单调。
  因为按钮比较多,所以按钮起名要稍微注意些,便于识别。

思路:
1. 首先需要把按钮按下的各个按键文本显示到文本框中
2. 在输入第一个按键的时候需要考虑的是必须是数字才行,否则无效(按下小数点,则默认为0.)
3. 当按下运算符之后保存运算符之前的第一个操作数
4. 当按下等号之后保存等号之前的第二个操作数
5. 第三和四步都可以使用 SubString() 方法来截取字符串然后转换成数字
6. 处理完使用鼠标点击只好,键盘的按下只需要托管给点击事件就行了,这样也不必去考虑按下的按键到底是不是数字,规避了其它符号的输入
7. 注册各个按钮的点击事件

注意点:
1. 每个操作数的小数点最多只能有一次,按第二次则无效
2. 除数不能为零
3. 按下等号之后如果继续按操作符,则按照正常逻辑应该是可以连续运算
4. 按了清除键之后,所有全部归为初始化


以下是需要用到的字段

        double num1;        //记录第一个操作数
        double num2;        //记录第二个操作数
        string str1;        //点击运算符之前的文本框内容
        string str2;        //点击运算符之后的文本框内容
        string str3;        //记录运算符之后的字符串
        bool isSymbool = false;    //是否点击过运算符
        string symbool = null;     //记录符号
        bool isPoint = false;      //记录是否点过小数点
        bool isEqu = false;        //记录是否点过等于号,以便按过等于之后按退格键直接全部清除

最简单的一个点击事件个人认为是属于CE按钮的清除事件了,只需要把所有的字段初始化成默认值就行,如下:

        //清除键-CE
        private void button_CE_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
            isSymbool = false;
            num1 = 0;
            num2 = 0;
            str1 = null;
            str2 = null;
            isPoint = false;
            isEqu = false;
        }

看以下代码,数字键0-9的点击事件全部都是一样的写法,唯一区别只是按钮名称修改一下。在做这些之前,需要把每一个按钮的Text属性设置为“0~9、+、-、*、/”

我这里的button_0代表的就是按键0,button_1就是代表的按键1
button_15则代表了等号

        private void button_0_Click(object sender, EventArgs e)
        {
            //每个数字按键的if else语句是为了判断是否已经点过等号,以便再次点击数字按键时候直接清空。例如如果已经按过等号,那么就是说文本框中已经有一个结果,那么我继续按一个数字的时候希望文本框中显示的是我现在点的数字
            if (isEqu == false)
            {
                textBox1.Text += button_0.Text;
                button15.Focus();//这个步骤主要是为了让焦点回归到等于号按钮上,在窗体加载的时候写上不知道怎么就是不想,TabIndx设置了也不行,很郁闷,没办法之下,只好每个按键都来这么一句了
            }
            else
            {
                //调用button_CE.Click事件
                button_CE.PerformClick();
                textBox1.Text += button_0.Text;
            }
        }

以下是退格键的代码片

        //退格键-←
        private void button_back_Click(object sender, EventArgs e)
        {
            //判断文本框中的字符是否含有内容
            if (textBox1.Text.Length > 0)
            {
                //先判断是否点过等号,没点进入if,点了进入else
                if (isEqu == false)
                {
                    //清除文本框中最后一个字符
                    textBox1.Text = textBox1.Text.Remove(textBox1.Text.Length - 1, 1);

                    //如果清除过后文本框中还能转换成数字,说明符号已经删除
                    if (double.TryParse(textBox1.Text, out num1))
                    {
                        num1 = double.Parse(textBox1.Text);
                        isSymbool = false;
                        symbool = null;
                    }

                    //如果symbool为null,则Contains方法会报错,所以必须是symbool不为空才进入循环
                    //symbool!=null,必须写在前面,&&会先判断第一个条件,如果是false,则后面的不再去判断,直接跳出
                    if (symbool != null && textBox1.Text.Contains(symbool))
                     {
                         //获取符号所在字符串的索引值
                         int a = textBox1.Text.IndexOf(symbool);
                         //截取符号之前的值给num1
                         double.TryParse(textBox1.Text.Substring(0, a), out num1);
                      }                
                }
                else
                {
                     button_CE.PerformClick();                   
                }               
            }
        }

以下是小数点代码片

        private void button_point_Click(object sender, EventArgs e)
        {
            if (isEqu == false)
            {
                //去除小数点首位的情况
                if (textBox1.Text.Length > 0)
                {
                    //判断按之前是否文本框中已经包含小数点,是则返回,操作无效
                    if (isPoint == false)
                    {
                        textBox1.Text += button_point.Text;
                    }
                    else
                    {
                        return;
                    }
                    isPoint = true;//按过之后记录已经点击过小数点
                }
            }
        }

以下是等于号代码片

 private void button15_Click(object sender, EventArgs e)
        {
            if (str1 != null)
            {
                if (isEqu == false && symbool != null)
                {
                    str2 = textBox1.Text;
                    //将字符串str2符号以及符号之前的字符截掉
                    str3 = str2.Substring(str1.Length + 1);

                    double.TryParse(str3, out num2);

                    switch (symbool)
                    {
                        case "+":
                            textBox1.Text = Convert.ToString(num1 + num2);
                            break;

                        case "-":
                            textBox1.Text = Convert.ToString(num1 - num2);
                            break;

                        case "*":
                            textBox1.Text = Convert.ToString(num1 * num2);
                            break;

                        case "/":
                            if (num2 == 0)
                                textBox1.Text = "除数不能为0";
                            else
                                textBox1.Text = Convert.ToString(num1 / num2);
                            break;

                        default:
                            break;
                    }
                }
            }

            isEqu = true;
            isSymbool = false;
        }

最后这个就是把键盘按下事件委托给鼠标的点击代码片
需要注册一个键盘按键事件

        //把键盘的数字按键直接委托给按钮,就不需要额外再编写关于键盘操作的程序
        private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            button15.Focus();
            switch (e.KeyChar)
            {
                case '0':
                    button_0.PerformClick();
                    e.Handled = true;   //这个代码目的:当键盘操作按下0,这个时候文本框直接输入0,但是又委托了按钮同样输入一个0
                    break;              //导致了,按下一次按键出现两个值,这种情况下需要把键盘的事件不响应                   

                case '1':
                    button_1.PerformClick();
                    e.Handled = true;
                    break;

                case '2':
                    button_2.PerformClick();
                    e.Handled = true;
                    break;

                case '3':
                    button_3.PerformClick();
                    e.Handled = true;
                    break;

                case '4':
                    button_4.PerformClick();
                    e.Handled = true;
                    break;

                case '5':
                    button_5.PerformClick();
                    e.Handled = true;
                    break;

                case '6':
                    button_6.PerformClick();
                    e.Handled = true;
                    break;

                case '7':
                    button_7.PerformClick();
                    e.Handled = true;
                    break;

                case '8':
                    button_8.PerformClick();
                    e.Handled = true;
                    break;

                case '9':
                    button_9.PerformClick();
                    e.Handled = true;
                    break;

                case '/':
                    button_div.PerformClick();
                    e.Handled = true;
                    break;

                case '+':
                    button_add.PerformClick();
                    e.Handled = true;
                    break;

                case '-':
                    button_sub.PerformClick();
                    e.Handled = true;
                    break;

                case '*':
                    button_mul.PerformClick();
                    e.Handled = true;
                    break;

                case '.':
                    button_point.PerformClick();
                    e.Handled = true;
                    break;

                case (Char)13:         //(Char)13代表的是Enter按键

                    button15.PerformClick();
                    e.Handled = true;
                    break;

                case (Char)27:         //(Char)20代表的是Esc按键
                    button_CE.PerformClick();
                    e.Handled = true;
                    break;

                case (Char)8:         //(Char)代表的是BackSpace退格键
                    button_back.PerformClick();
                    e.Handled = true;
                    break;

                default:     //当按下的按钮不是以上按键时候,直接不响应,不需要再去判断了
                    e.Handled = true;
                    break;
            }
        }

  以上代码组合到Form1中就是完成了计算器的只做了,当然数字按键需要补全下。

  菜单栏其实没什么作用,因为当时是根据PC自带的计算器做的,为了样式一样,就拖了一个菜单栏控件,并没有实际效果,要实现的话,可能就得以后学的更多了。

  当时,我连try…catch…都还不会,程序经常会报错,没办法之下基本是使用了if…else逻辑判断来规避这个问题的,做到了尽量乱按也不会报错,所以有些地方逻辑判断可能会有点多,有点乱,不如直接使用try…catch…来得更为方便。

C# Winform开发人脸识别小程序 (基于百度接口) 手把手教你用.Net Core WinForm制作一个人脸识别小程序 阅读详情

相关推荐

C#简单窗体应用程序(一)

使用C#创建控制台应用程序的基本步骤: (1)创建项目; (2)用户界面设计; (3)属性设置; (4)编写程序代码; (5)保存、调试、运行; 例题:创建一个Windows窗体应用程序,在窗体中添加两个按钮,当单击第一个按钮时,显示“我来啦!”,当单击第二个按钮时,显示“我走啦!”。 第一步:创建项目; 文件→新建→项目;选择“项目类型”...

高校微课堂 4万+

C#画图(WinForm)

使用C#在Windows应用程序里绘图,可能用到移动图像、擦掉图像,调整大小等等。我这里有一个画图的小程序,简单的实现了这些。。。 定义图像的基类: abstract class DrawBase...{    internal Color m_BackColor;    internal Color m_ForeColor;    internal static int m_

hbxtlhx的专栏 1万+

C# WinForm实现简单的计算器

在数字按钮的点击事件处理程序中,我们将按钮的文本追加到文本框中。在操作符按钮的点击事件处理程序中,我们保存第一个操作数和当前选择的操作符,并清空文本框。在等号按钮的点击事件处理程序中,我们获取第二个操作数,并根据选择的操作符进行相应的计算。最后,我们将计算结果显示在文本框中。我们将添加10个按钮用于输入0到9的数字,以及"+“、”-“、”*“和”/"按钮用于四则运算。在窗体中输入数字和操作符,点击等号按钮进行计算,计算结果会显示在文本框中。完成上述代码后,我们需要在窗体的设计视图中布局控件,并将按钮的。

AhTf__的博客 803

C# 搭建的一些小程序

目录前言一、内容 前言 最近搭建了一些c#的小程序,作为记录。 一、内容 Github:https://github.com/zhoujinyong1/comprehensive 综合小程序(每个程序都可独立运行) FFMPEGvideo:通过FFMPEG实现视频的分割与合并(自行下载FFMPEG安装) FTP:通过FTP进行上传和下载;配置文件(config.ini)的读写 Library-management-system-main:图书管理系统(连接Access数据库) List:list的一些用

qq_41373415的博客 1912

很实用的30个c#小程序实例

用c#编写的一份完整的30个小程序,很适合初学者的使用!

SAP采购信息记录批量维护实战:用BAPI ME_INFORECORD_MAINTAIN搞定价格等级和条件记录

本文深入解析SAP标准BAPI ME_INFORECORD_MAINTAIN在采购信息记录批量维护中的应用,特别聚焦价格等级和条件记录的技术难点。通过实战案例和代码示例,帮助用户高效处理供应商-物料价格数据,提升供应链管理效率。

weixin_42522320的博客 410

C#编程,用winform(窗体应用程序)写一个满足日常使用的计算器。附完整程序。

用C#编程写一个属于自己的计算器,计算器教程,winform程序。

laiwangouliang的博客 9181

病理组学分析系列教程1:使用Python-histolab进行病理图像预处理,tiles切片自动生成

病理图像tiles自动生成,WSI图像预处理

qq_43449643的博客 1741

自制抽奖小程序

基于C#的抽奖小程序需求分析功能制作后续 需求分析 我们在生活中,在很多地方总是需要使用到一些抽奖小程序,或是抽签小程序。那么我们是否可以自己动手制作这样一款程序呢?答案当然是肯定的。 在本文中,我将利用C#制作一款抽奖小程序。非常的简单实用,大家可以动手试一试。 功能 使用C#制作抽奖程序。 点开始,滚动显示抽奖人,结束,显示中奖人。 制作 打开VS,创建Windows窗体应用 选择项目文件夹 根据自己的实际存储位置,进行更改。 打开 视图 中的工具箱,通过拖拉相关配件,进行计算器页面的设计,注意相

4789

手把手教你用STM32的SPI驱动MCP2517FD实现CAN FD通信(附完整代码)

本文详细介绍了如何使用STM32通过SPI驱动MCP2517FD实现CAN FD通信,涵盖硬件连接、SPI驱动编写、寄存器配置及数据收发实战。提供完整代码示例和常见问题排查指南,帮助开发者快速构建高可靠性的CAN FD通信系统,适用于汽车电子和工业控制等领域。

weixin_30607029的博客 674

N5105核显直通PVE:从黑屏到HDMI输出的完整指南

PCI直通能让虚拟机独占物理设备,但核显直通远没有独显那么轻松。Intel核显与CPU、显示输出链路的强耦合使UEFI引导、GOP驱动、驱动签名等环节都成了黑屏陷阱。在PVE虚拟化环境中,通过IOMMU开启、vfio-pci绑定、OVMF固件和Q35机型配合,可以绕过KVM检测,让Windows虚拟机正确驱动核显,从HDMI口输出画面,并解锁Intel Quick Sync硬解能力。这种方案尤其适合N5105等低功耗迷你主机,可作为客厅HTPC、本地视频硬解或依赖硬件加速的轻量工作台。本文基于N5105平台

weixin_31082403的博客 374

用WinForm做一个简单的计算器

首先创建一个界面将Button控件拖进来,修改好Text以及Name, 显示器用lable来做,将默认text和Tag属性设置为0,背景颜色BackColor可以根据自己喜好修改 数字0-9按钮名称Btnnumber1-9 加减乘除 点 等于 按钮名为Btnplus.Btnreduce.Btnride.Btnexcept.Btndoc.Btnend emmm代码如下: double number1 = 0; double number2 = 0; double

weixin_45226050的博客 4051

2023-10-20 - MacBook - 优化外接2k显示器体验:告别字小与字虚的终极指南

本文针对MacBook外接2K显示器时普遍遇到的字体过小和边缘发虚问题,提供了终极解决方案。通过深入解析macOS的HiDPI与Retina显示原理,并详细指导使用SwitchResX等工具开启隐藏的HiDPI模式,实现完美的2倍整数缩放,从而在保证字体大小合适的同时获得清晰锐利的显示效果,彻底告别字小与字虚的困扰。

solidity8miner的博客 476

使用C#写winform小程序入门

帮朋友要写一个自用的winform小程序,一开始打算拿java的swing写,可是发现太难用了,没用过的话,开发效率极低。 所以就转C#写吧,反正C#和java很相近,减少很多学习成本。 先说工具,C#一般对应的是SQLServer的数据库,安装稍有麻烦,我这有两个安装条件一直无法满足,算了,还是用mysql。 开发工具的话,最常用的Visual Studio,最新版的单单是winform的功能就要5个G之大。。。。。。网上又搜了搜,发现一款叫Sharpdevelop的轻量级的C#开发软件可以用之。(使用时

a816120的博客 4004

23、管状剪纸结构的研究与功能生成连杆机构的综合设计

本文研究了管状剪纸结构的压缩运动特性,通过剪纸技术将非刚性可折叠的Yoshimura和Kresling折纸结构转化为刚性可折叠结构,并提出径向可闭合剪纸(RC-kiri)构型。推导了位移与折叠角之间的数学关系,设计了带外部LET接头的RC-kiri模型,建立了力-位移理论模型并通过Abaqus进行有限元验证,制作了3D打印物理模型以测量直径变化。同时,研究了四杆和六杆功能生成连杆机构的综合设计方法,基于负闭合运动链和最小二乘法实现函数生成。结果表明理论、仿真与实验整体吻合良好,误差来源得到分析,为机器人、机

nokia的博客 167

A2B V1.0协议学习笔记(A2B System Specification V1.0)

A2B全称是 Automotive Audio Bus 汽车音频总线,主要是解决传统音频总线线多、线重、成本贵等问题。本文是以A2B V1.0规范为准,现在ADI又推出了A2B V2.0,物理层不兼容,采用了QPSK编码方式,后续有时间再更新。A2B总线的优点:支持1主多从的架构(最多10个子节点)支持50Mbps(具体是49.152 Mbps)的高带宽传输以及

qflook的博客 4426

抖音火爆表白小程序(C#语言实现)

文章目录前言第一步:创建项目1、创建windows窗口应用程序2、更改项目名称和储存位置3、选择合适的.NET框架4、项目创建完成第二步:设计窗体1、添加控件2、更改属性3、更改窗体属性第三步:添加事件1、添加[好呀]事件2、添加[算了吧]事件3、禁用关闭窗口第四步:调试生成打包程序1、调试(F5/CTRL+F5)2、更改应用程序(生成的.exe)图标3、生成4、打包写在后面 前言   好看的皮囊千篇一律,有趣的灵魂万里挑一。最近在学习C#编程语言,接触到了winform,记得曾经在抖音上看到过这样一个小

sunshine的博客 2万+

【教程4>第4章>第12节】通过FPGA实现基于FFT变换的频偏估计和补偿

基于FFT变换的频偏估计和补偿,其基本原理如下:而频偏补偿的目的是将频偏后的信号频谱移回原来的位置。

FPGA/MATLAB学习教程/源码/项目合作开发 882

C#使用Winform做的简易计算器

【代码】C#使用Winform做的简易计算器。

自律遇到更好的自己!! 749

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

使用C# winform 制作一个按钮可自适应屏幕大小的 简易加减乘除计算器

一:成果物 不多展示,,,我们开始吧。。 二: 窗体包含内容 2.1 显示屏部分组成 显示屏部分由两个组件组成,一个是方便操作的panel控件位于顶部,且为了使其显示屏在改变窗体大小时一直位于顶部,要将其属性 设置为 (Dock :TOP) 另外一个标签为 Label 标签 将其放置于Panel控件,将其调整至合适大小(将属性 AutoSize : False),可以为Label和Panel 调整合适的BackColor 使其区分开来。可以为Label设置...

qq_45761241的博客 3433

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C#winform实现计算器

截取的数字依次入栈等待计算,截取的第一个运算符直接入栈,后面截取的运算符,先和栈顶的运算符进行优先级比较,如果当前准备入栈的运算符优先级低于或等于栈顶的运算符,则拿出数字栈中的两个数字和符号栈中的栈顶符号进行运算,将结果压入数字栈中,新的运算符入符号栈中,遍历完成后,再重复刚才的操作,两个数字一个运算符依次参与运算,结果压入数字栈,直到数字栈中只剩最后一个操作数时,这个操作数就是表达式的运算结果。第二种方法是在点击等号之后,在运算之前先对表达式逻辑进行判断,如果无法计算,可以显示报错信息,合规再计算结果。

m0_51467144的博客 2377

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

通过winform实现仿制Windows计算器

参照Windows的内置计算器,实现标准计算器部分(一)实现基本功能通过按键进行计算,并显示结果。(二)其他附属功能悬停在桌面上;右侧显示记录,点击记录从新操作该次计算,记录管理;(三)实现其他计算器科学计算器: 位数转换;

yinbizhidiao的博客 907

winform练习的几个小程序

1 首先添加菜单(MenuStrip)控件里面创建文件(打开文件,保存文件),格式(*自动换行),样式(字体,颜色),打开记录(显示,隐藏),添加容器(panel)控件,在容器中添加集合盒子(listbox)和按钮(button)两个控件。2 创建玩家 电脑 裁判三个类,里面写出拳方法和计算方法判断结果(玩家数-电脑数=结果)在点击每个按钮中,将按钮文本赋值给larbel文本,分装一个玩游戏的方法。1 首先创建玩家 电脑 裁判文本和文本框,以及石头剪刀布三个按钮。

NUO1357589842的博客 623

C#一个网络小程序的逐步实现过程

  记录编写一个网络小程序的思考和代码实现过程。

dawn0718的专栏 1174

基于winform的简单计算器及其范围判断

该计算器由两个窗体构成,首先是主菜单窗体分别有最大值最小值和延时3个数据,文本框显示的是默认数据。右下角是一个按钮,点击可以进入计算机界面。上面是由主菜单传来的参数:最大值最小值,延时的作用是进度条的运行速度。下面主要是简单的计算器按键。(声明本程序无法实现四则运算)

FDFOEVER的博客 335

使用c#制作一个小型桌面程序

创建.NET Framework新项目,将之前生成的dll放在Demo文件夹的bin ->debug或是 release中(看你自己用的什么模式),创建完成后 系统会自动生成一些文件,其中 pch.cpp 先不要修改,pch.h中先导入自己需要用到的库,下面是我的代码。布局完了之后会自动生成Form1.Designer.cs 的窗口设计代码,点击控件按F4 还可以修改他们的属性。完成之后点击生成 就可以在bin中出现的你的.exe文件咯,是不是很简单呀~[狗头]我们还需要一个入口主程序。

qq_44691564的博客 5369
SmallMr
博客等级 码龄10年 7粉丝 1原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值