C# WPF上位机开发(倒计时软件)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
生活当中,我们经常会遇到倒计时的场景,比如体育运动的时候、考试的时候等等。正好最近我们学习了c# wpf开发,完全可以用它来做一个简单的倒计时软件。倒计时的原理其实不复杂,就是设定一个起始时间,每到达一个周期之后,就开始递减,直到递减为0,倒计时结束。
实现上面呢,我们可以分成两部分来完成。一部分是界面的设计,另外一部分就是代码的编写。关于界面的部分,比较简单一点的做法就是AA:BB五个字符的形式。毕竟目前来说,我们学到的布局方法还不是很多,AA:BB的方法虽然简约了一点,但是也可以帮助我们来解决问题。
代码部分,最终要的就是定时器的创建和执行。首先,我们需要创建一个定时器,这个定时器肯定有一些属性需要配置。接着,配置完定时器之后,它肯定还有一个周期回调函数,在这个回调函数当中,我们添加上必要的代码,周期性修改AA:BB的内容,这样就可以完成倒计时的工作。最后,等AA:BB恢复为0的时候,还需要关闭定时器。当然做的复杂一点的话,还可以通过反复设置定时器的方法来使得软件功能更加地完善。
1、构建界面
c# wpf最大的一个好处就是可以一边写脚本,一边查看界面的效果。本身界面的开发工作也是可以和业务代码分开来的。所以,按照刚才设计的AA:BB的形式,首先设计和调整好界面。不出意外,界面部分的代码应该是这样的,
<Window x:Class="WpfApp.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:WpfApp"mc:Ignorable="d"Title="Timer" Height="450" Width="800"><Grid><Label x:Name="num1" FontSize="80" Content="0" HorizontalAlignment="Left" Margin="257,135,0,0" VerticalAlignment="Top" RenderTransformOrigin="0.38,0.541"/><Label x:Name="num2" FontSize="80" Content="0" HorizontalAlignment="Left" Margin="302,135,0,0" VerticalAlignment="Top" RenderTransformOrigin="-0.395,0.609"/><Label x:Name="num3" FontSize="80" Content=":" HorizontalAlignment="Left" Margin="364,135,0,0" VerticalAlignment="Top" RenderTransformOrigin="-0.395,0.609"/><Label x:Name="num4" FontSize="80" Content="0" HorizontalAlignment="Left" Margin="397,135,0,0" VerticalAlignment="Top"/><Label x:Name="num5" FontSize="80" Content="0" HorizontalAlignment="Left" Margin="442,135,0,0" VerticalAlignment="Top"/></Grid>
</Window>
2、界面的微调
有了基本的布局之后,一般我们还会根据看到的界面效果,做一些微调,直到它符合我们的要求为止。因为所有的微调操作都是可以实时看到反馈结果的,所以如果项目本身比较简单的话,这个微调的时间并不需要花费太久。
3、编写代码
前面我们讨论过,代码部分修改.xaml.cs即可,主要的内容就是添加定时器,实现定时器回调函数,更新label内容。为了方便大家理解,这里给出完整的代码,
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;namespace WpfApp
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{private int num = 2400;private System.Windows.Threading.DispatcherTimer dispatcherTimer = null;public MainWindow(){InitializeComponent();// initializationdisplay_number();dispatcherTimer = new System.Windows.Threading.DispatcherTimer();dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);dispatcherTimer.Interval = new TimeSpan(0, 0, 1);dispatcherTimer.Start();}private void dispatcherTimer_Tick(object sender, EventArgs e)//计时执行的程序{num -= 1;if(num == 0){dispatcherTimer.Stop();return;}display_number();}private void display_number(){// display numnum1.Content = Convert.ToString((num / 60) / 10);num2.Content = Convert.ToString((num / 60) % 10);num4.Content = Convert.ToString((num % 60) / 10);num5.Content = Convert.ToString((num % 60) % 10);}}
}
代码当中主要有三个函数。函数MainWindow是构造函数,除了系统自带的内容之外,我们还创建了一个定时器,它的名字叫dispatchTimer。这个定时器的回调函数是dispatchTimer_Tick,执行周期是每1s被调用一次,并且在创建完毕之后,立即执行。
第二个函数是dispatchTimer_Tick,这就是刚刚说的定时器回调函数,每1s执行一次。每一次执行的时候,我们都需要num递减1。这个num就是总的计数时间,以秒为单位。假设我们设置的num是1200,那就代表1200s,时间长度为20min。如果时间为0之后,那么可以停止定时器的执行了。
第三个函数是display_number,这个函数在前面两个函数当中都被调用了。它的功能比较纯粹,主要就是显示AA:BB的内容,其中AA代表分钟,BB代表秒钟,怎么把num转化成AA:BB,主要就是采取一些除法和取余的手段来实现的,大家可以参考对应的代码思考一下就能明白里面的远原理了。
4、调试和测试
调试和测试就比较简单了。测试主要有两点,第一,验证软件启动之后,是否真的发生了数据递减的动作。第二,时间递减为0之后,是不是定时器就停止了操作。如果这两点都已经ok了,那说明我们编写的软件就是成功的。不然就需要回去检查一下原因,看看问题发生在了什么地方。
注:
如果需要把小时也算在里面,有兴趣的同学可以试试这个逻辑,
// display numnum1.Content = Convert.ToString((num / 3600) / 10);num2.Content = Convert.ToString((num / 3600) % 10);num4.Content = Convert.ToString((num % 3600 / 60) / 10);num5.Content = Convert.ToString((num % 3600 / 60) % 10);num7.Content = Convert.ToString((num % 60) / 10);num8.Content = Convert.ToString((num % 60) % 10);
相关文章:
C# WPF上位机开发(倒计时软件)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 生活当中,我们经常会遇到倒计时的场景,比如体育运动的时候、考试的时候等等。正好最近我们学习了c# wpf开发,完…...
Mysql timestamp和datetime区别
文章目录 一、存储范围和精度二、默认值和自动更新三、时区处理四、索引和性能五、存储空间和数据复制六、使用场景和注意事项七、时区转换 MySQL是一个常用的关系型数据库管理系统,其内置了多种数据类型用于存储和操作数据。其中,timestamp和datetime是…...
新手村之SQL——分组与子查询
1.GROUP BY GROUP BY 函数就是 SQL 中用来实现分组的函数,其用于结合聚合函数,能根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。 mysql> SELECT country, COUNT(country) AS teacher_count-> FROM teacher…...
【hacker送书第9期】算法训练营(入门篇)
第9期图书推荐 内容简介作者简介精彩书评图书目录概述参与方式 内容简介 本书以海量图解的形式,详细讲解常用的数据结构与算法,又融入大量的竞赛实例和解题技巧。通过对本书的学习,读者可掌握12种初级数据结构、15种常用STL函数、10种二叉树和…...
微服务链路追踪组件SkyWalking实战
概述 微服务调用存在的问题 串联调用链路,快速定位问题;理清服务之间的依赖关系;微服务接口性能分析;业务流程调用处理顺序; 全链路追踪:对请求源头到底层服务的调用链路中间的所有环节进行监控。 链路…...
ubuntu 更换国内镜像
备份 cd /etc/aptcp sources.list sources.list.bakup修改源为清华源 sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g sources.list更新软件源 apt-get update其他源如下: mirrors.ustc.edu.cn 中科大 mirrors.163.com 163 mirrors.aliyun.com 阿里云...
树模型与深度模型对比
表格型数据为什么那么神奇,能让树模型在各种真实场景的表格数据中都战胜深度学习呢?作者认为有以下三种可能: 神经网络倾向于得到过于平滑的解冗余无信息的特征更容易影响神经网络 所以一定程度的特征交叉是不是必要的,因为one-ho…...
测试类运行失败:TestEngine with ID ‘junit-jupiter‘ failed to discover tests
背景:原本我的项目是可以运行的,然后我用另外一台电脑拉了下来,也是可以用的,但是很奇怪,用着用着就不能用了。报了以下错误: /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home/bin/java …...
nodejs使用node-cron实现定时任务功能
ChatGPT国内站点:海鲸AI 在Node.js中,node-cron是一个轻量级的任务调度库,它允许你根据类似于Cron的时间表来安排任务的执行。如果你想要每十分钟执行一次任务,你可以按照以下步骤来设置: 安装node-cron: 如…...
【1day】蓝凌OA 系统datajson.js接口远程命令执行漏洞学习
注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞概述 二、影响版本 三、资产测绘 四、漏洞复现...
ABCDE类网络的划分及保留网段
根据IP地址的分类,IP地址被分为A、B、C、D和E五类。下面是对ABCDE类网络的划分及保留网段的详细描述: A类网络:范围从1.0.0.0到127.0.0.0,网络地址的最高位必须是“0”,可用的A类网络有127个,每个网络能容…...
营销系统规则引擎
一、系统介绍 规则引擎是一个用于执行营销规则的模块,其包括营销规则配置、规则校验等功能。规则引擎可以根据预先设定的条件和逻辑,自动化地执行特点的营销策略,帮助企业更好地吸引客户,增加销售和提高客户满意度。 规则引擎功能…...
【Linux】命令行参数
文章目录 前言一、C语言main函数的参数二、环境变量总结 前言 我们在Linux命令行输入命令的时候,一般都会跟上一些参数选项,比如l命令,ls -a -l。以前我总是觉得这是理所当然的,没深究其本质究竟是什么,今天才终于知道…...
【信息安全】-个人敏感信息、个人信息、个人金融信息
文章目录 个人敏感信息个人敏感信息判定举例 个人信息个人信息判定举例 个人金融信息内容a) 账户信息指账户及账户相关信息b) 鉴别信息c) 金融交易信息d) 个人身份信息e) 财产信息f) 借贷信息g) 其他信息: 出处 个人敏感信息 个人敏感信息判定 个人敏感信息是指一旦泄露、非法…...
海外服务器和国内服务器有什么样的区别呢
海外服务器和国内服务器有什么样的区别呢,其实呢在外形方面是大同小异,除了外形还有一些其他方面还存在这一些差异。 一,地理位置的差异。 海外服务器——有可能在中国数据中心之外的任何国家地区,例如美国服务器,韩…...
电脑屏幕亮度怎么调?学会4个方法,轻松调节亮度!
“我总是感觉我电脑屏幕太暗了,有时候如果光线好一点,会看不清电脑屏幕。有什么可以把电脑调亮一点的简单方法吗?” 在我们的日常生活中,电脑已经成为我们工作、学习、娱乐不可或缺的工具。然而,长时间面对电脑屏幕可能…...
微信小程序之猜数字和猜拳小游戏
目录 效果图 app.json 一、首页(index3)的代码 wxml代码 wxss代码 二、猜数字页面(index)代码 wxml代码 wxss代码 js代码 三.游戏规则页面(logs)代码 wxml代码 wxss代码 四.猜拳页面ÿ…...
CETN01 - How to Use Cloud Classroom
文章目录 I. Introduction to Cloud ClassroomII. How to Use Cloud Classroom1. Publish Resources2. Conduct Activities3. Class Teaching Reports4. View Experience Values5. Performance in Cloud Classroom I. 云课堂介绍II. 如何使用云课堂1. 发布资源2. 进行活动3. 班…...
安卓8预装可卸载应用
环境 系统:Android 8 CPU:MTK 理论上改法适用于其他平台,比如展讯。 不适用于安卓11。安卓11请参照android 11预装APP到data/app目录 实现 假设要内置test这个应用。 第一步把test添加到系统编译配置中,不同平台或cpu文件不一样。 比如&am…...
微服务实战系列之MemCache
前言 书接前文,马不停蹄,博主继续书写Cache的传奇和精彩。 Redis主要用于数据的分布式缓存,通过设置缓存集群,实现数据的快速响应,同时也解决了缓存一致性的困扰。 EhCache主要用于数据的本地缓存,因无法保…...
解决服务端渲染程序SSR运行时报错: ReferenceError: document is not defined
现象: 原因: 该错误表明在服务端渲染 (SSR) 过程中,有一些代码尝试在没有浏览器环境的情况下执行与浏览器相关的操作。这在服务端渲染期间是一个常见的问题,因为在服务端渲染期间是没有浏览器 API。 解决办法: 1. 修…...
【漏洞复现】狮子鱼任意文件上传漏洞
漏洞描述 狮子鱼CMS(Content Management System)是一种网站管理系统,旨在帮助用户更轻松地创建和管理网站。它具有用户友好的界面和丰富的功能,包括页面管理、博客、新闻、产品展示等。 狮子鱼CMS使用简单直观的管理界面,使得网站所有者可以方便地进行内容的发布、管理和…...
LINUX 下部署github仓库
打开tumx django-admin startproject project_name #创建django项目 project_name配置git ssh-keygen # 生成密钥 连接 github 在github中打开setting 添加密钥 并且允许 write access git init # 把当前文件夹配置为git仓库 git config --global user.name xxx git config --g…...
CentOS中安装数据库
1.下载 网址:https://dev.mysql.com/downloads/mysql/ 按如图选择,然后点击Download 这里它让我们登录,我们直接选择不登录,直接下载 2.关闭防火墙 systemctl disable firewalld3.正式安装 切换到/usr/local下 cd /usr/l…...
GPT-Crawler一键爬虫构建GPTs知识库
GPT-Crawler一键爬虫构建GPTs知识库 写在最前面安装node.js安装GPT-Crawler启动爬虫结合 OpenAI自定义 assistant自定义 GPTs(笔者用的这个) 总结 写在最前面 GPT-Crawler一键爬虫构建GPTs知识库 能够爬取网站数据,构建GPTs的知识库…...
在微信小程序中如何改变默认打开的页面
在微信小程序中,在我们编写页面的时候,可能会在重新渲染的时候导致页面跳转到默认打开的页面上,为了提升用户的一个体验,我们可以设置一些内容来修改小程序默认打开的页面,提升开发者的开发体验。 当我们打开一个微信…...
Ardupilot开源飞控之VTOL之旅:配件试装
Ardupilot开源飞控之VTOL之旅:配件试装 1. 源由2. 分析2.1 【修改使用】FC & PDB & GPS打印件2.2 【直接使用】VTX & CRSF打印件 3. 试装3.1 【结构】问题1:GPS座子尺寸非常紧凑,需要用力压入卡座内。3.2 【结构】问题2ÿ…...
STM32-GPIO
一、GPIO简介 GPIO(General Purpose Input Output)通用输入输出口 可配置8种输入输出模式 引脚电平:0V~3.3V,部分引脚可容忍5V 输出模式下:可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输…...
MySQL的事务
<!DOCTYPE html> <html> <head> <meta charset"UTF-8" /> <title>MySQL的事务</title> </head> <body> <!-- 事务是一组操作的集合,它是一个不可分隔的工作单位,事务会把所有的操作作…...
go-carbon v2.2.14 发布,轻量级、语义化、对开发者友好的 Golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 golang 时间处理库,支持链式调用。 目前已被 awesome-go 收录,如果您觉得不错,请给个 star 吧 github.com/golang-module/carbon gitee.com/golang-module/carbon 安装使用 Golang 版本大于…...
浙江做网站多少钱/大众网潍坊疫情
来源:https://s.yam.com/w6mfR一、注解(annotations)列表SpringBootApplication: 包含了ComponentScan、Configuration和EnableAutoConfiguration注解。其中ComponentScan让spring Boot扫描到Configuration类并把它加入到程序上下文。Configuration 等同…...
企业宣传片制作公司天津/什么是搜索引擎优化推广
点击上方关注我们!11月15日,由亚信安全主办的“安全世界 5正当时”2020第五空间战略发展高峰论坛在北京盛大举行。来自政府、运营商、金融和能源等关键信息基础设施行业的负责人,生态合作伙伴出席本次活动,“共启安全数字世界”,聚…...
wordpress评轮审核/网络营销和网络推广有什么区别
点击查看全文 当今时代很多吃瓜群众对程序员的印象都是 而程序员的真实情况却是这样:每天大部分时间都在改代码,写代码,看代码才是我们真实的工作日常,到底每天要写多少行才是好程序员呢? 为了探讨这个问题首先要了解程…...
以前做视频的网站/seo优化公司如何做
我们项目springcloud feignribbonconsulzuul,正常的点击访问没有问题,当进行jemeter压力测试的时候,一旦并发上去,访问此时超过100多万以后,就会出现以下错误:Caused by: feign.RetryableException: Read timed out e…...
宁波网络公司网站建设项目/做seo需要投入的成本
linux 设备驱动之 8250 串口驱动------------------------------------------本文系本站原创,欢迎转载!转载请注明出处:http://ericxiao.cublog.cn/------------------------------------------一:前言前一段时间自己实践了一下8250芯片串口驱动的编写。今天就在此基…...
做兼职网站赚钱吗/百度一下百度搜索官网
从接触thinkphp到今天,填完此坑,必有其他的坑有会冒出来。哎!这个填坑之路我想是没有尽头的了。 最近,需要使用ajax完成一些操作,一开始想Ajax简单啊,不过是一种提交数据的方式,不过是害苦了我。…...