引言

本次项目目的主要为了熟悉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计算器的更多相关文章

  1. winform 计算器

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  2. Winform——计算器

    namespace 计算器2._0 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } pr ...

  3. Winform——计算器进制转换

    namespace 进制转换2._0 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } p ...

  4. [原][C#][winForm]分级基金折溢价WinForm网络计算器

    分级基金折溢价WinForm网络计算器 通过子/母基金代码,从 [ 东方财富网,天天基金网,新浪 ] 抓取分级基金的子母基金数据(代码,名称,净值,价格), 并计算出子基金(A基金,B基金)以及母基金 ...

  5. winform操作windows系统计算器

    winform对系统计算器的调用,启动,最大化最小化显示,在mainwindow设置topmost=true时,正常显示计算器并置顶. /// <summary> /// 获取窗体的句柄函 ...

  6. 1.C#WinForm基础制作简单计算器

    利用c#语言编写简单计算器: 核心知识点: MessageBox.Show(Convert.ToString(comboBox1.SelectedIndex));//下拉序号 MessageBox.S ...

  7. winform(四)——简单计算器制作

    效果图: 代码区: using System; using System.Collections.Generic; using System.ComponentModel; using System. ...

  8. winform制作简单计算器

    public Form1() { InitializeComponent(); textBox2.Text = ";//主显示屏 textBox1.Text = "";/ ...

  9. WinForm 制作一个简单的计算器

    namespace WindowsFormsApplication6 { public partial class Form1 : Form { //存储上次点击了什么按钮,0代表什么都没有点击,1代 ...

  10. C# winform(计算器)

随机推荐

  1. 作业帮基于 DolphinScheduler 的数据开发平台实践

    摘要 随着任务数量.任务类型需求不断增长,对我们的数据开发平台提出了更高的要求.本文主要分享我们将调度引擎升级到 Apache DolphinScheduler 的实践经验,以及对数据开发平台的一些思 ...

  2. bx lr

    bx lr 的作用等同于 mov pc,lr 即跳转到lr中存放的地址处. 那么lr存放的是什么地址呢? lr就是连接寄存器(Link Register, LR),在ARM体系结构中LR的特殊用途有两 ...

  3. zabbix 4.0修改页面LOGO

    基本页面展示 一.Logo icon-sprite.svg是一个集合的图片,logo和一级菜单栏里面的图标是在这上面平移得到的 第一种方法 1.  zabbix安装好以后的默认LOGO如下: 2.   ...

  4. java_GUI

    package GUi;import java.awt.*;import static java.awt.Color.red;public class GuI { public static void ...

  5. 异源数据同步 → DataX 为什么要支持 kafka?

    开心一刻 昨天发了一条朋友圈:酒吧有什么好去的,上个月在酒吧当服务员兼职,一位大姐看上了我,说一个月给我 10 万,要我陪她去上海,我没同意 朋友评论道:你没同意,为什么在上海? 我回复到:上个月没同 ...

  6. 【CentOS7】之执行yum命令报错

    备份文件: # CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the ...

  7. docker高级篇-docker-compose容器编排介绍及实战

    Docker-compose是什么?能干嘛?解决了哪些痛点? 是什么? Docker-compose是Docker官方推出 的一个工具软件,可以管理多个Docker容器组成的一个应用.你需要编写一个一 ...

  8. echarts的x轴显示不全的解决办法

    echarts的x轴显示不全的解决办法 一.背景 当x轴类目较多时,label显示时会自动间隔显示,也就是会隐藏掉中间的label,如下图: 二.解决办法 通过设置 xAxis.axisLabel.i ...

  9. BOM – Window.matchMedia

    参考 Youtube – Detecting Screen Size and OS Dark Mode with matchMedia() - JavaScript Tutorial 介绍 CSS 有 ...

  10. CSS – background and styling img

    前言 之前写过一些: W3Schools 学习笔记 (2) – CSS Image Sprites W3Schools 学习笔记 (3) – CSS Styling Images & CSS ...