WPF实战案例 | C# WPF实现计算器源码


WPF实战案例 | C# WPF实现计算器源码
- 一、设计来源
- 计算器应用程序讲解
- 1.1 主界面
- 1.2 计算界面
- 二、效果和源码
- 2.1 界面设计(XAML)
- 2.2 代码逻辑(C#)
- 2.3 实现步骤总结
- 源码下载
- 更多优质源码分享
作者:xcLeigh
文章地址:https://blog.csdn.net/weixin_43151418/article/details/145280091
WPF实战案例 | C# WPF实现计算器源码, C# WPF实现计算器源码,这只是一个简单的实现,你可以根据需要添加更多的功能,如处理负数、添加更多的运算符(如平方根、百分比等)、使用更复杂的布局或引入 MVVM 架构以更好地分离逻辑和界面。如果你对其中的某个部分有具体的问题,或者想对这个计算器进行扩展,可以随时问我。这个源码让你快速搭建自己的应用程序,注释完整,代码规范,各种风格都有,代码上手简单,代码独立,可以直接用程序打开,运行使用。也可直接点击EXE运行程序。
一、设计来源
本文章是分类专栏【WPF 从入门到精通
】下的里面的一篇,专栏里面包括网站,窗体应用程序的源码,技术点解析等案列源码,让你更加掌握WPF。持续更新中,欢迎大家关注,一起学习交流。
✂ 点击快速进入专栏
计算器应用程序讲解
说明:
- 数字输入:
通常使用数字键(0-9)来输入参与计算的数值。可以通过多次点击数字键输入多位数,计算器会将输入的数字按照从左到右的顺序依次组合。
- 运算符输入:
加(+):用于执行加法运算,将前后输入的两个数相加。例如,输入 2,再点击 +,接着输入 3,最后点击 =,结果为 5。
减(-):用于执行减法运算,用前一个数减去后一个数。例如,输入 5,点击 -,再输入 2,点击 =,结果为 3。
乘(× 或 *):执行乘法运算,将前后两个数相乘。如输入 4,点击 × 或 *,输入 3,点击 =,结果为 12。
除(÷ 或 /):进行除法运算,用前一个数除以后一个数。例如,输入 8,点击 ÷ 或 /,输入 2,点击 =,结果为 4。
1.1 主界面
计算器窗体主界面,展示自己的logo和标题(这里可以自定义,可以扩展自己想要的风格),通常使用数字键(0-9)来输入参与计算的数值。可以通过多次点击数字键输入多位数,计算器会将输入的数字按照从左到右的顺序依次组合。目前实现了基本的加减乘除,小数,清空,回退一步等功能。

1.2 计算界面
计算器窗体计算界面,展示自己的logo和标题(这里可以自定义,可以扩展自己想要的风格),通常使用数字键(0-9)来输入参与计算的数值。可以通过多次点击数字键输入多位数,计算器会将输入的数字按照从左到右的顺序依次组合。目前实现了基本的加减乘除,小数,清空,回退一步等功能。

二、效果和源码
2.1 界面设计(XAML)
<Window x:Class="WpfCalculator.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Calculator" Height="450" Width="350"><Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><TextBox Grid.Row="0" x:Name="resultTextBox" IsReadOnly="True" TextAlignment="Right" FontSize="20"/><Grid Grid.Row="1"><Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><Button Grid.Row="0" Grid.Column="0" Content="7" Click="Button_Click"/><Button Grid.Row="0" Grid.Column="1" Content="8" Click="Button_Click"/><Button Grid.Row="0" Grid.Column="2" Content="9" Click="Button_Click"/><Button Grid.Row="0" Grid.Column="3" Content="+" Click="Operator_Click"/><Button Grid.Row="1" Grid.Column="0" Content="4" Click="Button_Click"/><Button Grid.Row="1" Grid.Column="1" Content="5" Click="Button_Click"/><Button Grid.Row="1" Grid.Column="2" Content="6" Click="Button_Click"/><Button Grid.Row="1" Grid.Column="3" Content="-" Click="Operator_Click"/><Button Grid.Row="2" Grid.Column="0" Content="1" Click="Button_Click"/><Button Grid.Row="2" Grid.Column="1" Content="2" Click="Button_Click"/><Button Grid.Row="2" Grid.Column="2" Content="3" Click="Button_Click"/><Button Grid.Row="2" Grid.Column="3" Content="*" Click="Operator_Click"/><Button Grid.Row="3" Grid.Column="0" Content="0" Click="Button_Click"/><Button Grid.Row="3" Grid.Column="1" Content="." Click="Button_Click"/><Button Grid.Row="3" Grid.Column="2" Content="=" Click="Equal_Click"/><Button Grid.Row="3" Grid.Column="3" Content="/" Click="Operator_Click"/><Button Grid.Row="4" Grid.Column="0" Content="C" Click="Clear_Click" Grid.ColumnSpan="2"/><Button Grid.Row="4" Grid.Column="2" Content="AC" Click="AllClear_Click" Grid.ColumnSpan="2"/></Grid></Grid>
</Window>
说明:
使用 Grid 布局来排列 TextBox(显示结果)和多个 Button(数字键、运算符键、清除键等)。
为 Button 元素绑定相应的 Click 事件处理程序。
2.2 代码逻辑(C#)
using System;
using System.Windows;namespace WpfCalculator
{public partial class MainWindow : Window{private string currentInput = "";private string operatorValue = "";private double firstOperand = 0;private bool isOperatorClicked = false;public MainWindow(){InitializeComponent();}private void Button_Click(object sender, RoutedEventArgs e){if (isOperatorClicked){resultTextBox.Text = "";isOperatorClicked = false;}Button button = (Button)sender;currentInput += button.Content.ToString();resultTextBox.Text = currentInput;}private void Operator_Click(object sender, RoutedEventArgs e){if (double.TryParse(currentInput, out double operand)){firstOperand = operand;}operatorValue = ((Button)sender).Content.ToString();isOperatorClicked = true;}private void Equal_Click(object sender, RoutedEventArgs e){if (double.TryParse(currentInput, out double secondOperand)){switch (operatorValue){case "+":resultTextBox.Text = (firstOperand + secondOperand).ToString();break;case "-":resultTextBox.Text = (firstOperand - secondOperand).ToString();break;case "*":resultTextBox.Text = (firstOperand * secondOperand).ToString();break;case "/":if (secondOperand!= 0){resultTextBox.Text = (firstOperand / secondOperand).ToString();}else{MessageBox.Show("Cannot divide by zero");}break;}currentInput = resultTextBox.Text;}}private void Clear_Click(object sender, RoutedEventArgs e){currentInput = "";resultTextBox.Text = "";}private void AllClear_Click(object sender, RoutedEventArgs e){currentInput = "";operatorValue = "";firstOperand = 0;isOperatorClicked = false;resultTextBox.Text = "";}}
}
说明:
- currentInput:存储当前输入的数字字符串。
- operatorValue:存储当前选择的运算符。
- firstOperand:存储第一个操作数。
- isOperatorClicked:标志是否已经点击了运算符。
- Button_Click 方法:将按钮的内容添加到 currentInput 中,并更新 - resultTextBox 的显示。
- Operator_Click 方法:将当前输入转换为操作数存储在 firstOperand 中,并存储当前运算符,设置 isOperatorClicked 为 true。
- Equal_Click 方法:将当前输入转换为第二个操作数,根据存储的运算符进行相应计算,并处理除以 0 的情况,更新结果显示。
- Clear_Click 方法:清除当前输入。
- AllClear_Click 方法:清除所有输入和操作状态。
2.3 实现步骤总结
在 XAML 中设计计算器的界面布局,包括 TextBox 和 Button 元素,并为 Button 绑定 Click 事件。
在 C# 代码中实现事件处理程序,处理数字输入、运算符输入、等于操作和清除操作。
存储和更新操作数和运算符,根据用户输入进行相应的计算操作。
源码下载
注:源码下载在文章头部也可以点击下载,跟这里的是一样的
WPF实战案例 | C# WPF实现计算器源码(源码) 点击下载

更多优质源码分享
-
【百篇源码模板】html5各行各业官网模板源码下载
-
【模板源码】html实现酷炫美观的可视化大屏(十种风格示例,附源码)
-
【VUE系列】VUE3实现个人网站模板源码
-
【HTML源码】HTML5小游戏源码
-
【C#实战案例】C# Winform贪吃蛇小游戏源码

💢 关注博主 带你实现畅游前后端
🏰 大屏可视化 带你体验酷炫大屏
💯 神秘个人简介 带你体验不一样得介绍
💘 为爱表白 为你那个TA,体验别致的浪漫惊喜
🎀 酷炫邀请函 带你体验高大上得邀请
① 🉑提供云服务部署(有自己的阿里云);
② 🉑提供前端、后端、应用程序、H5、小程序、公众号、大作业等相关业务;
如🈶合作请联系我,期待您的联系。
注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有),https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。
亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请 留言(私信或评论),博主看见后一定及时给您答复,💌💌💌
原文地址:https://blog.csdn.net/weixin_43151418/article/details/145280091(防止抄袭,原文地址不可删除)
相关文章:
WPF实战案例 | C# WPF实现计算器源码
WPF实战案例 | C# WPF实现计算器源码 一、设计来源计算器应用程序讲解1.1 主界面1.2 计算界面 二、效果和源码2.1 界面设计(XAML)2.2 代码逻辑(C#)2.3 实现步骤总结 源码下载更多优质源码分享 作者:xcLeigh 文章地址&a…...
AutoGen入门——快速实现多角色、多用户、多智能体对话系统
1.前言 如https://github.com/microsoft/autogen所述,autogen是一多智能体的框架,属于微软旗下的产品。 依靠AutoGen我们可以快速构建出一个多智能体应用,以满足我们各种业务场景。 本文将以几个示例场景,使用AutoGen快速构建出…...
LeetCode 热题 100_全排列(55_46_中等_C++)(递归(回溯))
LeetCode 热题 100_两数之和(55_46) 题目描述:输入输出样例:题解:解题思路:思路一(递归(回溯)): 代码实现代码实现(思路一(…...
将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1.标准版)
问题 项目里使用了 AzureBlob 存储了用户上传的各种资源文件,近期 AzureBlob 的流量费用增长很快,想通过分析Blob的日志,获取一些可用的信息,所以有了这个需求:将存储账户的日志(读写,审计&…...
pthread_exit函数
pthread_exit 是 POSIX 线程库(pthread)中的一个函数,用于显式地终止调用线程。与 exit 函数不同,pthread_exit 仅影响调用它的线程,而不是整个进程。使用 pthread_exit 可以确保线程在退出时能够正确地释放线程相关的…...
1月21日星期二今日早报简报微语报早读
1月21日星期二,农历腊月廿二,早报#微语早读。 1、多地官宣:2025年可有序、限时或在限定区域燃放烟花爆竹; 2、TikTok恢复在美服务;特朗普提出继续运营TikTok方案,外交部:若涉及收购中国企业应…...
【2024年终总结】我与CSDN的一年
👉作者主页:心疼你的一切 👉作者简介:大家好,我是心疼你的一切。Unity3D领域新星创作者🏆,华为云享专家🏆 👉记得点赞 👍 收藏 ⭐爱你们,么么哒 文章目录 …...
openssl 正确生成v3带SAN的证书
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
Golang Gin系列-5:数据模型和数据库
在这篇Gin教程的博客中,我们将探索如何将模型和数据库与Gin框架无缝集成,使你能够构建健壮且可扩展的web应用程序。通过利用流行的库并遵循最佳实践,你将学习如何定义模型、建立数据库连接、执行CRUD操作以及确保基于gin的项目中的数据完整性…...
比简单工厂更好的 - 工厂方法模式(Factory Method Pattern)
工厂方法模式(Factory Method Pattern) 工厂方法模式(Factory Method Pattern)工厂方法模式(Factory Method Pattern)概述工厂方法模式(Factory Method Pattern)结构图工厂方法模式&…...
分布式搜索引擎02
1. DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1. DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,…...
阿里云安装mikrotik7配置内网互通
阿里云近期推出了200M不限量机器,对于没有公网接入的中小企业可以借助这个机器对多地分支机构进行内网互通。目前已经有很多机构用这个搞跨云k8s,跨云集群了。 mikrotik作为一个商用的软件,操作性比一些开源的软件好用不少。 本文使用的网段为172.16.1…...
Docker网段和服务器ip冲突导致无法访问网络的解决方法
若宿主机所在网络的网段为172.[17-31].xx.xx,则会与Docker本身内部网络间出现冲突,此时需要重新配置Docker默认地址池 一:查看docker的默认网段 route 二:修改docker的默认网段 etc/docker/daemon.json文件增加修改网段信息 {…...
Kubernetes 集群中安装和配置 Kubernetes Dashboard
前言 上篇成功部署Kubernetes集群后,为了方便管理和监控集群资源,安装Kubernetes Dashboard显得尤为重要。Kubernetes Dashboard 是一个通用的、基于 Web 的 UI,旨在让用户轻松地部署容器化应用到 Kubernetes 集群,并对这些应用进…...
Android开发之Spinner
Android开发之Spinner 1. 概述2. Spinner3. 适配器3.1 ArrayAdapter3.2 SimpleAdapter 1. 概述 Android开发学习笔记。学习下拉框控件Spinner和适配器(数组适配器ArrayAdapter、简单适配器SimpleAdapter)的使用。 2. Spinner 下拉框控件,用…...
【c++继承篇】--继承之道:在C++的世界中编织血脉与传承
目录 引言 一、定义二、继承定义格式2.1定义格式2.2继承关系和访问限定符2.3继承后子类访问权限 三、基类和派生类赋值转换四、继承的作用域4.1同名变量4.2同名函数 五、派生类的默认成员构造函数5.1**构造函数调用顺序:**5.2**析构函数调用顺序:**5.3调…...
分布式系统通信解决方案:Netty 与 Protobuf 高效应用
分布式系统通信解决方案:Netty 与 Protobuf 高效应用 一、引言 在现代网络编程中,数据的编解码是系统设计的一个核心问题,特别是在高并发和低延迟的应用场景中,如何高效地序列化和传输数据对于系统的性能至关重要。随着分布式系…...
计算机网络 (54)系统安全:防火墙与入侵检测
前言 计算机网络系统安全是确保网络通信和数据不受未经授权访问、泄露、破坏或篡改的关键。防火墙和入侵检测系统(IDS)是维护网络系统安全的两大核心组件。 一、防火墙 定义与功能 防火墙是一种用来加强网络之间访问控制的特殊网络互联设备,它…...
stack底层实现细节
一、stack 和 queue 在 STL 中 stack 和 queue 已经不算是容器了,而是容器适配器,适配器模式也是常用的模式之一,体现在 stack 和 queue 中就是他们两个的实现不是单独写的,而是复用了前面合适的优秀的STL 容器的代码而实现的具有…...
工业相机 SDK 二次开发-Halcon 插件
本文介绍了 Halcon 连接相机时插件的使用。通过本套插件可连接海康 的工业相机。 一. 环境配置 1. 拷贝动态库 在 用 户 安 装 MVS 目 录 下 按 照 如 下 路 径 Development\ThirdPartyPlatformAdapter 找到目录为 HalconHDevelop 的文 件夹,根据 Halcon 版本找到对…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
