winform计算器
引言
本次项目目的主要为了熟悉winform控件使用,以及学习Microsoft.CSharp的使用。
技术栈
C# winform
实现效果


设计与实现
按键使用button空间,计算算式以及计算结果使用label控件。运算核心使用Microsoft.CSharp,利用C#动态编译特性,将算式转换成源码,交给编译器计算。
//算式运算代码
public static double EvaluateExpression(string expression)
{
CSharpCodeProvider provider = new CSharpCodeProvider();//提供编译源码的方法
CompilerParameters parameters = new CompilerParameters();//提供编译过程中的各种参数
parameters.GenerateInMemory = true;//不生成物理文件,使用内存
//动态编译时需要指向它所需要的库
parameters.ReferencedAssemblies.Add("mscorlib.dll");
parameters.ReferencedAssemblies.Add("System.Core.dll");
//CompilerResults存储编译后的结果
//@后定义的是c#源码
//编译器会将源码执行,自动进行算术运算,返回expression的结果
CompilerResults results = provider.CompileAssemblyFromSource(parameters, @"
using System;
public class ExpressionEvaluator
{
public static double Evaluate()
{
return " + expression + @";
}
}");
//编译出错返回
if (results.Errors.HasErrors)
{
throw new ArgumentException("Error compiling expression.", nameof(expression));
}
//通过反射获取程序集中的ExpressionEvaluator
Type evaluatorType = results.CompiledAssembly.GetType("ExpressionEvaluator");
//获取"Evaluate"方法
MethodInfo methodInfo = evaluatorType.GetMethod("Evaluate");
//返回结果(第一个null表示:调用静态方法,第二个null表示:方法没有参数)
return (double)methodInfo.Invoke(null, null);
}
挑战与解决方案
原本想要直接将算式String分解,一步一步运算,但是太麻烦,所以采用Microsoft.CSharp
winform计算器的更多相关文章
- winform 计算器
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Winform——计算器
namespace 计算器2._0 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } pr ...
- Winform——计算器进制转换
namespace 进制转换2._0 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } p ...
- [原][C#][winForm]分级基金折溢价WinForm网络计算器
分级基金折溢价WinForm网络计算器 通过子/母基金代码,从 [ 东方财富网,天天基金网,新浪 ] 抓取分级基金的子母基金数据(代码,名称,净值,价格), 并计算出子基金(A基金,B基金)以及母基金 ...
- winform操作windows系统计算器
winform对系统计算器的调用,启动,最大化最小化显示,在mainwindow设置topmost=true时,正常显示计算器并置顶. /// <summary> /// 获取窗体的句柄函 ...
- 1.C#WinForm基础制作简单计算器
利用c#语言编写简单计算器: 核心知识点: MessageBox.Show(Convert.ToString(comboBox1.SelectedIndex));//下拉序号 MessageBox.S ...
- winform(四)——简单计算器制作
效果图: 代码区: using System; using System.Collections.Generic; using System.ComponentModel; using System. ...
- winform制作简单计算器
public Form1() { InitializeComponent(); textBox2.Text = ";//主显示屏 textBox1.Text = "";/ ...
- WinForm 制作一个简单的计算器
namespace WindowsFormsApplication6 { public partial class Form1 : Form { //存储上次点击了什么按钮,0代表什么都没有点击,1代 ...
- C# winform(计算器)
随机推荐
- leetcode第 109 场双周赛
6930. 检查数组是否是好的 - 力扣(LeetCode) 首先判断数组长度是不是最大值 + 1, 然后排个序,判断0到n - 2是不是都是1到最大值的一个排列,满足这些返回true就行了 clas ...
- mariadbl数据库环境迁移
前言: 数据库的主要作用就是对数据进行保存和维护,所以备份数据是数据库管理中最常用的操作.为了防止数据库意外崩溃或硬件损伤而导致的数据丢失,数据库系统提供了备份和恢复策略.保证数据安全的最重要的一个措 ...
- 【LLM训练系列】NanoGPT源码详解和中文GPT训练实践
本文是[训练LLM系列]的第一篇,主要重点介绍NanoGPT代码以及中文.英文预训练实践.最新版参见我的知乎:https://zhuanlan.zhihu.com/p/716442447 除跑通原始N ...
- 安装 MinGW-w64
简介 MinGW-w64 是 MinGW 项目的 64 位版本.MinGW(Minimalist GNU for Windows)是 GCC 编译套件和 GNU Binutils 移植到 Window ...
- SpringBoot定时任务实现数据同步
业务的需求是,通过中台调用api接口获得,设备数据,要求现实设备数据的同步. 方案一:通过轮询接口的方式执行 pullData() 方法实现数据同步 该方式的原理是先清空之前的所有数据,然后重新插入通 ...
- 合合信息参编“生成式人工智能个人信息保护技术要求系列标准”,助力AI行业可信发展
生成式人工智能作为新一轮的技术革命成果,在赋能千行百业,给经济社会发展带来新机遇的同时,也产生了个人信息泄露.数据安全风险等问题.在此背景下,中国信息通信研究院(简称"中国信通院" ...
- 用PowerDesigner创建Oracle模型转为mysql模型
一.首先打开PowerDesigner 1.File(位置:左上角)–>New Model–>Physical Date Model(物理数据模型) (1)DBMS选择MySQL5.0(版 ...
- 【赵渝强老师】Kubernetes的探针
Kubernetes提供了探针(Probe)对容器的健康性进行检测.实际上我们不仅仅要对容器进行健康检测,还要对容器内布置的应用进行健康性检测. Probe有以下两种类型: livenessProbe ...
- C++20中对于并发方面的进步
在当今的编程世界中,并发处理能力变得越来越重要.C++20 在并发方面带来了一些进步,使开发者能够更高效.更安全地编写多线程应用程序.这些进步主要包括: 作用域线程(Scoped Threads) 停 ...
- google 搜索技巧
size qq.com inurl : size 指定网站 inurl 这个网站的指定内容 filetype 指定搜索的文件类型