WPF实现一个简单的多运算符表达式计算器,供大家参考,具体内容如下
1.先看下效果图
首先外围给了一个grid 把他分成了两行 第一行用来显示文本框给了一个低于第二行的高度 第二行用来存按钮 窗体的大小自己去调就好了 我这里给的是380x268
1
2
3
4
|
< Grid.RowDefinitions > < RowDefinition Height = "0.7*" ></ RowDefinition > < RowDefinition ></ RowDefinition > </ Grid.RowDefinitions > |
这是一个非常简单的布局 没有用到样式 头部是用了一个Border给一个圆弧实现的 代码如下
1
2
3
4
5
|
< 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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
< 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样式就写完了,接下来就是后端了
上面的代码我们看到我们已经定义了单击事件 首先找到数字的单击事件写上以下代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
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 ; |
意思就是判断一下用户点击的是哪一个数字 然后把他加到文本框内
接下来就是运算符的单击事件 同理数字的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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 ; } |
然后导入命名空间
1
|
using System.Data; |
这个命名空间里面有一个超级好用的方法Compute
Compute的意思简单来说就是放入一个string类型的带有表达式的字符串计算,
找到等于号的事件 加入代码
1
2
3
4
5
6
7
8
9
|
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
< 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 > |
后台代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
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