当前位置: 首页 > news >正文

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 界面设计&#xff08;XAML&#xff09;2.2 代码逻辑&#xff08;C#&#xff09;2.3 实现步骤总结 源码下载更多优质源码分享 作者&#xff1a;xcLeigh 文章地址&a…...

AutoGen入门——快速实现多角色、多用户、多智能体对话系统

1.前言 如https://github.com/microsoft/autogen所述&#xff0c;autogen是一多智能体的框架&#xff0c;属于微软旗下的产品。 依靠AutoGen我们可以快速构建出一个多智能体应用&#xff0c;以满足我们各种业务场景。 本文将以几个示例场景&#xff0c;使用AutoGen快速构建出…...

LeetCode 热题 100_全排列(55_46_中等_C++)(递归(回溯))

LeetCode 热题 100_两数之和&#xff08;55_46&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;递归&#xff08;回溯&#xff09;&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08…...

将 AzureBlob 的日志通过 Azure Event Hubs 发给 Elasticsearch(1.标准版)

问题 项目里使用了 AzureBlob 存储了用户上传的各种资源文件&#xff0c;近期 AzureBlob 的流量费用增长很快&#xff0c;想通过分析Blob的日志&#xff0c;获取一些可用的信息&#xff0c;所以有了这个需求&#xff1a;将存储账户的日志&#xff08;读写&#xff0c;审计&…...

pthread_exit函数

pthread_exit 是 POSIX 线程库&#xff08;pthread&#xff09;中的一个函数&#xff0c;用于显式地终止调用线程。与 exit 函数不同&#xff0c;pthread_exit 仅影响调用它的线程&#xff0c;而不是整个进程。使用 pthread_exit 可以确保线程在退出时能够正确地释放线程相关的…...

1月21日星期二今日早报简报微语报早读

1月21日星期二&#xff0c;农历腊月廿二&#xff0c;早报#微语早读。 1、多地官宣&#xff1a;2025年可有序、限时或在限定区域燃放烟花爆竹&#xff1b; 2、TikTok恢复在美服务&#xff1b;特朗普提出继续运营TikTok方案&#xff0c;外交部&#xff1a;若涉及收购中国企业应…...

【2024年终总结】我与CSDN的一年

&#x1f449;作者主页&#xff1a;心疼你的一切 &#x1f449;作者简介&#xff1a;大家好,我是心疼你的一切。Unity3D领域新星创作者&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6; &#x1f449;记得点赞 &#x1f44d; 收藏 ⭐爱你们&#xff0c;么么哒 文章目录 …...

openssl 正确生成v3带SAN的证书

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

Golang Gin系列-5:数据模型和数据库

在这篇Gin教程的博客中&#xff0c;我们将探索如何将模型和数据库与Gin框架无缝集成&#xff0c;使你能够构建健壮且可扩展的web应用程序。通过利用流行的库并遵循最佳实践&#xff0c;你将学习如何定义模型、建立数据库连接、执行CRUD操作以及确保基于gin的项目中的数据完整性…...

比简单工厂更好的 - 工厂方法模式(Factory Method Pattern)

工厂方法模式&#xff08;Factory Method Pattern&#xff09; 工厂方法模式&#xff08;Factory Method Pattern&#xff09;工厂方法模式&#xff08;Factory Method Pattern&#xff09;概述工厂方法模式&#xff08;Factory Method Pattern&#xff09;结构图工厂方法模式&…...

分布式搜索引擎02

1. DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1. DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c…...

阿里云安装mikrotik7配置内网互通

阿里云近期推出了200M不限量机器&#xff0c;对于没有公网接入的中小企业可以借助这个机器对多地分支机构进行内网互通。目前已经有很多机构用这个搞跨云k8s,跨云集群了。 mikrotik作为一个商用的软件&#xff0c;操作性比一些开源的软件好用不少。 本文使用的网段为172.16.1…...

Docker网段和服务器ip冲突导致无法访问网络的解决方法

若宿主机所在网络的网段为172.[17-31].xx.xx&#xff0c;则会与Docker本身内部网络间出现冲突&#xff0c;此时需要重新配置Docker默认地址池 一&#xff1a;查看docker的默认网段 route 二&#xff1a;修改docker的默认网段 etc/docker/daemon.json文件增加修改网段信息 {…...

Kubernetes 集群中安装和配置 Kubernetes Dashboard

前言 上篇成功部署Kubernetes集群后&#xff0c;为了方便管理和监控集群资源&#xff0c;安装Kubernetes Dashboard显得尤为重要。Kubernetes Dashboard 是一个通用的、基于 Web 的 UI&#xff0c;旨在让用户轻松地部署容器化应用到 Kubernetes 集群&#xff0c;并对这些应用进…...

Android开发之Spinner

Android开发之Spinner 1. 概述2. Spinner3. 适配器3.1 ArrayAdapter3.2 SimpleAdapter 1. 概述 Android开发学习笔记。学习下拉框控件Spinner和适配器&#xff08;数组适配器ArrayAdapter、简单适配器SimpleAdapter&#xff09;的使用。 2. Spinner 下拉框控件&#xff0c;用…...

【c++继承篇】--继承之道:在C++的世界中编织血脉与传承

目录 引言 一、定义二、继承定义格式2.1定义格式2.2继承关系和访问限定符2.3继承后子类访问权限 三、基类和派生类赋值转换四、继承的作用域4.1同名变量4.2同名函数 五、派生类的默认成员构造函数5.1**构造函数调用顺序&#xff1a;**5.2**析构函数调用顺序&#xff1a;**5.3调…...

分布式系统通信解决方案:Netty 与 Protobuf 高效应用

分布式系统通信解决方案&#xff1a;Netty 与 Protobuf 高效应用 一、引言 在现代网络编程中&#xff0c;数据的编解码是系统设计的一个核心问题&#xff0c;特别是在高并发和低延迟的应用场景中&#xff0c;如何高效地序列化和传输数据对于系统的性能至关重要。随着分布式系…...

计算机网络 (54)系统安全:防火墙与入侵检测

前言 计算机网络系统安全是确保网络通信和数据不受未经授权访问、泄露、破坏或篡改的关键。防火墙和入侵检测系统&#xff08;IDS&#xff09;是维护网络系统安全的两大核心组件。 一、防火墙 定义与功能 防火墙是一种用来加强网络之间访问控制的特殊网络互联设备&#xff0c;它…...

stack底层实现细节

一、stack 和 queue 在 STL 中 stack 和 queue 已经不算是容器了&#xff0c;而是容器适配器&#xff0c;适配器模式也是常用的模式之一&#xff0c;体现在 stack 和 queue 中就是他们两个的实现不是单独写的&#xff0c;而是复用了前面合适的优秀的STL 容器的代码而实现的具有…...

工业相机 SDK 二次开发-Halcon 插件

本文介绍了 Halcon 连接相机时插件的使用。通过本套插件可连接海康 的工业相机。 一. 环境配置 1. 拷贝动态库 在 用 户 安 装 MVS 目 录 下 按 照 如 下 路 径 Development\ThirdPartyPlatformAdapter 找到目录为 HalconHDevelop 的文 件夹&#xff0c;根据 Halcon 版本找到对…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...