源码:https://github.com/Cheng-xiaozhen/Simple-Win-10-Calculator

效果图


当然与Win10的还是有很多差距的 左图是Win10的

同时,win10的图标是白色的,相应的找了个黑色的图标

简单计算

计算 12*3 = 36


查看计算记录

出现计算错误的时候
计算 12/0


除了清除C键,其他的按钮都锁住

点击菜单,切换模式

这个就不做了。。。

代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;namespace Calculator
{public partial class Form1 : Form{public enum CalcuType{//由于英语太菜,乘法和除法单词混了,所以看下面在运算符按钮的源码时,不要被单词 混淆None,/// <summary>/// 加法/// </summary>Addition,/// <summary>/// 减法/// </summary>Substraction,/// <summary>/// 除法/// </summary>Multiplication,/// <summary>/// 乘法/// </summary>Division,/// <summary>/// 模除/// </summary>Mod}private bool _IsFirst = true;private bool _IsVisible = false;private CalcuType calcuType = CalcuType.None;private double num1;private double num2;private string record = "";public Form1(){InitializeComponent();}private void Form1_Load(object sender, EventArgs e){btn0.Click += new EventHandler(btnVal_Click);btn1.Click += new EventHandler(btnVal_Click);btn2.Click += new EventHandler(btnVal_Click);btn3.Click += new EventHandler(btnVal_Click);btn4.Click += new EventHandler(btnVal_Click);btn5.Click += new EventHandler(btnVal_Click);btn6.Click += new EventHandler(btnVal_Click);btn7.Click += new EventHandler(btnVal_Click);btn8.Click += new EventHandler(btnVal_Click);btn9.Click += new EventHandler(btnVal_Click);panel3.Visible = false;}/// <summary>/// 数字按钮点击方法/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnVal_Click(object sender, EventArgs e){Button btn = sender as Button;if (_IsFirst){             string number = this.txtDisplay.Text;if (number == "0"){number = btn.Text;}else{number += btn.Text;}this.txtDisplay.Text = number;}else{_IsFirst = true;txtDisplay.Text = btn.Text;}}/// <summary>/// 小数点 点击事件/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnPoint_Click(object sender, EventArgs e){if (txtDisplay.Text.Contains(".")){return;}else{txtDisplay.Text += ".";}}/// <summary>/// 取相反数/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnPlusMinus_Click(object sender, EventArgs e){if (txtDisplay.Text.StartsWith("-")){txtDisplay.Text = txtDisplay.Text.Substring(1);}else{if (txtDisplay.Text.Equals("0")){return;}txtDisplay.Text = "-" + txtDisplay.Text;}}/// <summary>/// 等于 求结果/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnEquals_Click(object sender, EventArgs e){num2 = Convert.ToDouble(txtDisplay.Text);num1 = Convert.ToDouble(lblShowOps.Text.Substring(0, lblShowOps.Text.Length - 1));lblShowOps.Text = "";record += (" "+txtDisplay.Text);switch(calcuType){case CalcuType.Addition:txtDisplay.Text = (num1 + num2).ToString();break;case CalcuType.Substraction:txtDisplay.Text = (num1 - num2).ToString();break;case CalcuType.Division:txtDisplay.Text = (num1 * num2).ToString();break;case CalcuType.Multiplication:txtDisplay.Text = (num1 / num2).ToString();break;case CalcuType.Mod:txtDisplay.Text = ((int)num1 % (int)num2).ToString();break;default:break;}record += " = " + txtDisplay.Text;textBox1.Text += record + "\r\n";record = "";_IsFirst = false;}/// <summary>/// 判断是不是数字/// </summary>/// <param name="value"></param>/// <returns></returns>private bool IsNumber(string value){return Regex.IsMatch(value, @"^-?[0-9]*[.]?[0-9]*$");}//开方private void btnSqrt_Click(object sender, EventArgs e){if (IsNumber(txtDisplay.Text)){double num = Convert.ToDouble(txtDisplay.Text);if (num>=0){txtDisplay.Text = Math.Sqrt(num).ToString();}else{lblShowOps.Text = "";txtDisplay.Text = "无效输入";}}else{txtDisplay.Text = "无效输入";}}//平方private void btnSquare_Click(object sender, EventArgs e){if (IsNumber(txtDisplay.Text)){double num = Convert.ToDouble(txtDisplay.Text);txtDisplay.Text = Math.Pow(num, 2).ToString();}}//求倒数private void btnInverse_Click(object sender, EventArgs e){if (IsNumber(txtDisplay.Text)){if (txtDisplay.Text!="0"){double num = Convert.ToDouble(txtDisplay.Text);txtDisplay.Text = (1 / num).ToString();}else{txtDisplay.Text = "无效输入";}}}//退位键private void btnBackSpace_Click(object sender, EventArgs e){if (txtDisplay.TextLength==1){txtDisplay.Text = "0";}else{txtDisplay.Text = txtDisplay.Text.Substring(0, txtDisplay.TextLength - 1);}}//清除 Cprivate void btnClear_Click(object sender, EventArgs e){txtDisplay.Text = "0";btnEquals.Enabled = true;lblShowOps.Text = "";calcuType = CalcuType.None;_IsFirst = true;record = "";unLock();}//CE键private void btnCE_Click(object sender, EventArgs e){txtDisplay.Text = "0";}/// <summary>/// 乘法/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnMul_Click(object sender, EventArgs e){if (lblShowOps.Text.Length==0){calcuType = CalcuType.Division;num1 = Convert.ToDouble(txtDisplay.Text);lblShowOps.Text = txtDisplay.Text + " x";txtDisplay.Text = "0";}else{num2 = Convert.ToDouble(txtDisplay.Text);num1 = Convert.ToDouble(lblShowOps.Text.Substring(0, lblShowOps.Text.Length- 1));string result = GetResult(num1, num2);lblShowOps.Text = result+" x";calcuType = CalcuType.Division;txtDisplay.Text = "0";}}/// <summary>/// 获取中间值/// </summary>/// <param name="num1"></param>/// <param name="num2"></param>/// <returns></returns>private string GetResult(double num1,double num2){string result="0";switch (calcuType){case CalcuType.Addition:result = (num1 + num2).ToString();break;case CalcuType.Substraction:result = (num1 - num2).ToString();break;case CalcuType.Division:result = (num1 * num2).ToString();break;case CalcuType.Multiplication:result = (num1 / num2).ToString();break;case CalcuType.Mod:result = ((int)num1 % (int)num2).ToString();break;default:break;}return result;}/// <summary>/// 减法/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnMinus_Click(object sender, EventArgs e){if (lblShowOps.Text.Length == 0){calcuType = CalcuType.Substraction;num1 = Convert.ToDouble(txtDisplay.Text);lblShowOps.Text = txtDisplay.Text + " -";txtDisplay.Text = "0";}else{num2 = Convert.ToDouble(txtDisplay.Text);num1 = Convert.ToDouble(lblShowOps.Text.Substring(0, lblShowOps.Text.Length - 1));string result = GetResult(num1, num2);lblShowOps.Text = result + " -";calcuType = CalcuType.Substraction;txtDisplay.Text = "0";}}/// <summary>/// 加法/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnAdd_Click(object sender, EventArgs e){if (lblShowOps.Text.Length == 0){calcuType = CalcuType.Addition;num1 = Convert.ToDouble(txtDisplay.Text);lblShowOps.Text = txtDisplay.Text + " +";txtDisplay.Text = "0";}else{num2 = Convert.ToDouble(txtDisplay.Text);num1 = Convert.ToDouble(lblShowOps.Text.Substring(0, lblShowOps.Text.Length - 1));string result = GetResult(num1, num2);lblShowOps.Text = result + " +";calcuType = CalcuType.Addition;txtDisplay.Text = "0";}}/// <summary>/// 除法/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnDiv_Click(object sender, EventArgs e){if (lblShowOps.Text.Length == 0){calcuType = CalcuType.Multiplication;num1 = Convert.ToDouble(txtDisplay.Text);lblShowOps.Text = txtDisplay.Text + " /";txtDisplay.Text = "0";}else{num2 = Convert.ToDouble(txtDisplay.Text);num1 = Convert.ToDouble(lblShowOps.Text.Substring(0, lblShowOps.Text.Length - 1));string result = GetResult(num1, num2);lblShowOps.Text = result + " /";calcuType = CalcuType.Multiplication;txtDisplay.Text = "0";}}/// <summary>/// 模除取余/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnPercent_Click(object sender, EventArgs e){if (lblShowOps.Text.Length == 0){calcuType = CalcuType.Mod;num1 = Convert.ToDouble(txtDisplay.Text);lblShowOps.Text = txtDisplay.Text + " %";txtDisplay.Text = "0";}else{num2 = Convert.ToDouble(txtDisplay.Text);num1 = Convert.ToDouble(lblShowOps.Text.Substring(0, lblShowOps.Text.Length - 1));string result = GetResult(num1, num2);lblShowOps.Text = result + " %";calcuType = CalcuType.Mod;txtDisplay.Text = "0";}}/// <summary>/// 历史记录/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnRecord_Click(object sender, EventArgs e){if (!_IsVisible){panel3.Visible = true;_IsVisible = true;}else{panel3.Visible = false;_IsVisible = false;}}/// <summary>/// 获得label中的记录/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void lblShowOps_TextChanged(object sender, EventArgs e){if (lblShowOps.Text!=""){record += lblShowOps.Text;}}private void txtDisplay_TextChanged(object sender, EventArgs e){if (!IsNumber(txtDisplay.Text)){Lock();}}/// <summary>/// 锁住按钮/// </summary>private void Lock(){btn0.Enabled = false;btn1.Enabled = false;btn2.Enabled = false;btn3.Enabled = false;btn4.Enabled = false;btn5.Enabled = false;btn6.Enabled = false;btn7.Enabled = false;btn8.Enabled = false;btn9.Enabled = false;btnPoint.Enabled = false;btnMinus.Enabled = false;btnAdd.Enabled = false;btnInverse.Enabled = false;btnDiv.Enabled = false;btnPercent.Enabled = false;btnCE.Enabled = false;btnEquals.Enabled = false;btnSqrt.Enabled = false;btnSquare.Enabled = false;btnBackSpace.Enabled = false;btnMul.Enabled = false;btnPlusMinus.Enabled = false;}/// <summary>/// 解锁按钮/// </summary>private void unLock(){btn0.Enabled = true;btn1.Enabled = true;btn2.Enabled = true;btn3.Enabled = true;btn4.Enabled = true;btn5.Enabled = true;btn6.Enabled = true;btn7.Enabled = true;btn8.Enabled = true;btn9.Enabled = true;btnPoint.Enabled = true;btnMinus.Enabled = true;btnAdd.Enabled = true;btnInverse.Enabled = true;btnDiv.Enabled = true;btnPercent.Enabled = true;btnCE.Enabled = true;btnEquals.Enabled = true;btnSqrt.Enabled = true;btnSquare.Enabled = true;btnBackSpace.Enabled = true;btnMul.Enabled = true;btnPlusMinus.Enabled = true;}/// <summary>/// 菜单/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void button1_Click(object sender, EventArgs e){MessageBox.Show("该功能正在开发");}}
}

做之前,想到了以前用JAVA做的那个计算器,本打算仍用JAVA做的时候的那个思路,点相应的按钮,在文本框,输入相应的文本,在点击 = 的时候,讲整个表达式,转换成后缀表达式,再求值。
后来,觉得有点不妥,虽然计算结果正确,但既然要仿win10的计算器,那也就仿win10计算器的计算方法,所以这次增加一个label,在输入第二个数的时候,将第一个数存到 label中,然后再计算。

昨天实验课的时候,将布局基本搭建完成。今天晚上把功能基本也完成了,但是,没经过大量的测试,可能还会有一些小问题。发现问题,请留言。

C# Winform 仿Win10-计算器相关推荐

  1. Winform仿Win10画图工具

    Winform仿Win10画图工具: 源码区: using System; using System.Collections.Generic; using System.ComponentModel; ...

  2. C#窗体实现的仿WIN10标准计算器

    上周C#的第一节winform课结束后老师布置了一个计算器的作业.由于之前学过C++所以语法方面都没什么问题,只是以前的代码练习都不怎么多,所以也想趁着这次学习语言的机会多练习.这是我的第一篇博客,若 ...

  3. win10计算器rsh_Win10 内置计算器评测:PowerShell 很靠谱

    计算器几乎是每个操作系统都具备的工具,不管是手机还是电脑,很多人都离不开它.然而这些系统内置计算器标准模式往往功能比较简单,基本上只用于单步运算,就像传统计算器那样,现在的Win10计算器也是如此.不 ...

  4. win10计算器rsh_Win10计算器在哪里?

    全新的windows10系统带来了不少新的特性和改变,其中win10的计算器位置就发生了很多的变化,导致很多网友们都以为win10计算器不见了,那么,win10计算器在哪里?如何打开?针对此问题,本文 ...

  5. 仿win10系统UI界面纯html网页网站后台UI界面

    仿win10系统UI界面纯html网页网站后台UI界面 一款经典仿win10系统UI界面纯html网页网站后台UI界面,效果超炫 演示地址:http://www.phprr.com/show-312

  6. Python uiautomation初探,测试Win10计算器

    在网上找 Python 客户端自动化测试的库,一般有 pywinauto.pywin32.pyautogui.uiautomation.本文仅对 uiautomation 做简单的了解. MS UI ...

  7. windows10计算机放桌面,将win10计算器放在桌面上的操作方法

    windows的系统都会自带计算器工具,WIN10也不例外,但是有朋友说他找了半天都找不到,不好找.所以很多朋友就在想可不可以把计算器放在桌面上方便下次使用.今天小编就向大家介绍一下将win10计算器 ...

  8. win10桌面计算机在哪里打开,Win10计算器在哪里?三种可以打开Win10计算器的方法图文介绍...

    七月底,微软正式发布了新一代Windows10正式版操作系统,作为电脑爱好者的小编也第一时间安装升级,全新Win10带来了不少新的特性,体验更为出色.不过最近在写电脑配置推荐文章时,由于要计算配置单价 ...

  9. 汇编语言程序设计——仿win7计算器(功能部分)

    下面代码实现的计算机基本的功能,包括加.减.乘.除.求倒.开方.百分比.记忆相关功能等,支持快捷键,显示也可以分段显示,如下图. 界面部分源码:http://blog.csdn.net/zhangji ...

最新文章

  1. Web3.js 0.20.x API 中文版翻译 1
  2. 谷歌浏览器翻译插件 saladict:沙拉查词
  3. ubuntu mysql emma_ubuntumysql客户端emma中文乱码问题解决_MySQL
  4. c语言的锁和Python锁,Python中全局解释器锁、多线程和多进程
  5. vue项目中主要文件的加载顺序(index.html、App.vue、main.js)
  6. 推荐笔记本用户使用的硬盘。。。2.5”战胜台式机硬盘 日立7K320-250GB
  7. 《网络对抗》Exp5 MSF基础应用
  8. linux开机启动 sogou输入法 xcompmgr .xprofile 黑块
  9. java dao接口_java web项目中dao和service前面为什么要有接口呢??
  10. 安卓日记本设计内容介绍_天一 | 教你捷径,使用VB开发安卓程序!
  11. 拓端tecdat|R语言中进行Spearman等级相关分析
  12. public class c中_C++中如何使用类模板
  13. 电话机器人源码智能电话机器人7项技术特点,教你选择合适的电话机器人!
  14. CAS单点登录原理及实现
  15. 关于深度学习的研究综述
  16. linux pwm控制蜂鸣器 滴滴_linux pwm实现蜂鸣器
  17. android Launcher 自定义View 高仿hola一键清理效果
  18. 2013-1-20·
  19. python基础之文件处理
  20. 移动端自动化测试appium(6)--搭建模拟器和真机环境

热门文章

  1. 我所热衷的编程生涯 连载(11)
  2. Linux USB 驱动开发实例(七)—— 基于USB 总线的无线网卡浅析
  3. 人脸识别60年:欧盟通用数据保护条例真的算“史上最严”吗
  4. 服务器主体信息截图,puppeteer实现线上服务器任意区域截图
  5. 汇编常用寄存器以及寻址方式
  6. 实战派来了!聊聊百度智能运维的“前世今生” | 技术沙龙
  7. 常用的排序算法-快速记忆
  8. 面试官最常问的10道测试用例面试题及答案,每1题都很经典
  9. WVS使用教程(Web Vulnerability Scanner)
  10. CSS top、margin-top和padding-top的区别