WPF实现多运算符表达式计算器
作者:赕 发布时间:2023-07-17 10:31:40
标签:WPF,计算器
WPF实现一个简单的多运算符表达式计算器,供大家参考,具体内容如下
1.先看下效果图
首先外围给了一个grid 把他分成了两行 第一行用来显示文本框给了一个低于第二行的高度 第二行用来存按钮 窗体的大小自己去调就好了 我这里给的是380x268
<Grid.RowDefinitions>
<RowDefinition Height="0.7*"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
这是一个非常简单的布局 没有用到样式 头部是用了一个Border给一个圆弧实现的 代码如下
<Border Margin="5" Padding="5" Background="White" BorderBrush="Black" BorderThickness="3,5,3,5" CornerRadius="10" VerticalAlignment="Top" Height="130" Width="240">
<TextBlock Name="ShowNumText" Height="100" Width="auto" VerticalAlignment="Top" FontSize="50" HorizontalAlignment="Right" >
</TextBlock>
</Border>
接下来就是按键部分了 用了一个UniformGrid布局 类似于一个表格 给4行4列 最后再往里面添加按钮实现的 分别给每个按钮设置背景颜色,字体颜色以及单击事件(一共4类单击事件 分别是数字的、运算符的、等于号、还有一个清空C)
<UniformGrid Grid.Row="1" Rows="4" Columns="4" Height="200" Width="250">
<Button Name="btn1" Content="1" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btn2" Content="2" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btn3" Content="3" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btnD" Content="÷" FontSize="35" Background="Black" Foreground="White" Click="btnD_Click"/>
<Button Name="btn4" Content="4" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btn5" Content="5" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btn6" Content="6" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btnX" Content="X" FontSize="35" Background="Black" Foreground="White" Click="btnD_Click"/>
<Button Name="btn7" Content="7" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btn8" Content="8" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btn9" Content="9" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btnM" Content="-" FontSize="35" Background="Black" Foreground="White" Click="btnD_Click"/>
<Button Name="btnC" Content="C" FontSize="35" Background="Black" Foreground="White" Click="btnC_Click"/>
<Button Name="btn0" Content="0" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btnE" Content="+" FontSize="35" Background="Black" Foreground="White" Click="btnD_Click"/>
<Button Name="btnP" Content="=" FontSize="35" Background="Black" Foreground="White" Click="btnP_Click"/>
</UniformGrid>
这样我们的xaml样式就写完了,接下来就是后端了
上面的代码我们看到我们已经定义了单击事件 首先找到数字的单击事件写上以下代码
var v = sender as Button;
switch (v.Content.ToString())
{
case "1":
ShowNumText.Text += 1;
break;
case "2":
ShowNumText.Text += 2;
break;
case "3":
ShowNumText.Text += 3;
break;
case "4":
ShowNumText.Text += 4;
break;
case "5":
ShowNumText.Text += 5;
break;
case "6":
ShowNumText.Text += 6;
break;
case "7":
ShowNumText.Text += 7;
break;
case "8":
ShowNumText.Text += 8;
break;
case "9":
ShowNumText.Text += 9;
break;
case "0":
ShowNumText.Text += 0;
break;
意思就是判断一下用户点击的是哪一个数字 然后把他加到文本框内
接下来就是运算符的单击事件 同理数字的
if (ShowNumText.Text == "")
return;
var v1 = sender as Button;
switch (v1.Content.ToString())
{
case "+":
ShowNumText.Text += "+";
break;
case "-":
ShowNumText.Text += "-";
break;
case "X":
ShowNumText.Text += "X";
break;
case "÷":
ShowNumText.Text += "÷";
break;
}
然后导入命名空间
using System.Data;
这个命名空间里面有一个超级好用的方法Compute
Compute的意思简单来说就是放入一个string类型的带有表达式的字符串计算,
找到等于号的事件 加入代码
try
{
string str= ShowNumText.Text.Replace('X', '*');
str= str.Replace('÷', '/');
DataTable dt = new DataTable();
string v = dt.Compute(str, null).ToString();
ShowNumText.Text = v.ToString();
}
catch { ShowNumText.Text = ""; }
用Replace方法过滤掉 x和÷
因为Compute 是不接收数学的乘和除的
最后在清空事件里加入一个ShowNumText.Text = "";//清空文本框
这样我们的计算器就写完了!!!
前台xaml
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApplication1"
mc:Ignorable="d"
Title="计算机" Height="380" Width="268">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.7*"></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Border Margin="5" Padding="5" Background="White" BorderBrush="Black" BorderThickness="3,5,3,5" CornerRadius="10" VerticalAlignment="Top" Height="130" Width="240">
<TextBlock Name="ShowNumText" Height="100" Width="auto" VerticalAlignment="Top" FontSize="50" HorizontalAlignment="Right" >
</TextBlock>
</Border>
<UniformGrid Grid.Row="1" Rows="4" Columns="4" Height="200" Width="250">
<Button Name="btn1" Content="1" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btn2" Content="2" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btn3" Content="3" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btnD" Content="÷" FontSize="35" Background="Black" Foreground="White" Click="btnD_Click"/>
<Button Name="btn4" Content="4" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btn5" Content="5" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btn6" Content="6" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btnX" Content="X" FontSize="35" Background="Black" Foreground="White" Click="btnD_Click"/>
<Button Name="btn7" Content="7" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btn8" Content="8" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btn9" Content="9" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btnM" Content="-" FontSize="35" Background="Black" Foreground="White" Click="btnD_Click"/>
<Button Name="btnC" Content="C" FontSize="35" Background="Black" Foreground="White" Click="btnC_Click"/>
<Button Name="btn0" Content="0" FontSize="35" Background="Black" Foreground="White" Click="btn1_Click_1"/>
<Button Name="btnE" Content="+" FontSize="35" Background="Black" Foreground="White" Click="btnD_Click"/>
<Button Name="btnP" Content="=" FontSize="35" Background="Black" Foreground="White" Click="btnP_Click"/>
</UniformGrid>
</Grid>
</Window>
后台代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
namespace WpfApplication1
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void btn1_Click_1(object sender, RoutedEventArgs e)//0-9绑定同一个事件
{
var v = sender as Button;
switch (v.Content.ToString())
{
case "1":
ShowNumText.Text += 1;
break;
case "2":
ShowNumText.Text += 2;
break;
case "3":
ShowNumText.Text += 3;
break;
case "4":
ShowNumText.Text += 4;
break;
case "5":
ShowNumText.Text += 5;
break;
case "6":
ShowNumText.Text += 6;
break;
case "7":
ShowNumText.Text += 7;
break;
case "8":
ShowNumText.Text += 8;
break;
case "9":
ShowNumText.Text += 9;
break;
case "0":
ShowNumText.Text += 0;
break;
}
}
private void btnD_Click(object sender, RoutedEventArgs e)//运算符也绑定同一个事件
{
if (ShowNumText.Text == "")
return;
var v1 = sender as Button;
switch (v1.Content.ToString())
{
case "+":
ShowNumText.Text += "+";
break;
case "-":
ShowNumText.Text += "-";
break;
case "X":
ShowNumText.Text += "X";
break;
case "÷":
ShowNumText.Text += "÷";
break;
}
}
private void btnP_Click(object sender, RoutedEventArgs e)
{
try
{
string str= ShowNumText.Text.Replace('X', '*');
str= str.Replace('÷', '/');
DataTable dt = new DataTable();
string v = dt.Compute(str, null).ToString();
ShowNumText.Text = v.ToString();
}
catch { ShowNumText.Text = ""; }
}
private void btnC_Click(object sender, RoutedEventArgs e)
{
ShowNumText.Text = "";//清空文本框
}
}
}
感谢你的观看!
来源:https://blog.csdn.net/Daniel_yka/article/details/98248195


猜你喜欢
- 图的实际应用在现实生活中,有许多应用场景会包含很多点以及点点之间的连接,而这些应用场景我们都可以用即将要学习的图这种数据结构去解决。地图:我
- 在 C 语言中,如果发生错误,上级函数要进行出错处理,层层上传,容易造成过多的出错处理代码,并且传递的效率比较低下。C++ 中的异常C++
- 一 引入考虑实现一种三轴机器人控件。三轴机器人用来将某种工件从一个位置运送到另一个位置。其X轴为手臂轴,可以正向和反向运动,它处于末端,直接
- 使用正则抓捕网上邮箱这就是我们需要抓捕的网站。实现思路:1、使用java.net.URL对象,绑定网络上某一个网页的地址2、通过java.n
- 一.显示、隐藏 jQuery 中显示方法为:.show(),隐藏方法为:.hide()。在无参数的时候,只是硬性的显示内容和隐藏内
- 这篇文章主要介绍了springboot @Configuration @bean注解作用解析,文中通过示例代码介绍的非常详细,对大家的学习或
- 本文实例讲述了Android开发使用Drawable绘制圆角与圆形图案功能。分享给大家供大家参考,具体如下:1. 创建类RoundCircl
- 基本概念Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制并发访问
- 1. 最小生成树连通图中的每一棵生成树 , 都是原图的极大无环子图 , 即: 从中删去任何一条边 , 生成树就不再连通;反之 , 在其中引入
- 说在前面大一软件工程在读,java萌新一只,第一次写博客,技术很菜勿喷。如有错误欢迎指出!这个小程序是给朋友的生日礼物,耗时半天,实际写起来
- 在阻塞队里中,除了对元素进行增加和删除外,我们可以把元素的删除做一个延迟的处理,即使用DelayQueue的方法。本文就来和大家聊聊Java
- 这篇文章主要介绍了Springboot打包部署代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 使用INI配置文件,简单便捷。该辅助工具类为C#操作INI文件的辅助类,源码在某位师傅的基础上完善的来,因为忘记最初的来源了,因此不能提及引
- 之前百度,google了很多,发现并没有介绍mongodb生产环境如何配置的文章, 当时想参考下都不行, 所以写篇文章,大家可以一块讨论下.
- 下面给大家介绍C#使用ICSharpCode.SharpZipLib.dll进行文件的压缩与解压功能,具体代码如下所示:using Syst
- 安装 Tomcat 之前请一定先安装 Java ,然后才能安装 Tomcat 。安装 Java 、环境变量 path 的设置以及 cmd 小
- 在使用AndroidNDK开发的时候有个事情是很烦人的,那就是创建本地代码文件夹,生成本地代码文件和创建本地代码的编译文件。特别是实现本地方
- maven使用exec插件运行java main方法,以下是3种不同的操作方式。一、从命令行运行1、运行前先编译代码,exec:java不会
- 今天使用mybatis-plus自动填充插入和更新时间有8小时时差后来发现只需要修改一下mybaits连接的url即可原先我是用的datas
- 前言默认删除文件的时候 File.Delete 是将文件永久删除,如果是一些文档,建议删除到回收站,这样用户可以自己还原 通过 SHFile