使用 C# Winfrom编写倒计时功能

2024-01-07 08:28

本文主要是介绍使用 C# Winfrom编写倒计时功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在日常生活中,我们经常需要倒计时来提醒自己重要的时间节点,比如倒计时到达一个特定的日期和时间。介绍一个使用 C# 编写的倒计时应用程序的实现。

步骤一:应用程序的功能

它具有以下几个主要特点:

  1. 用户输入目标日期和时间:应用程序提供了一个日期选择器控件,用户可以选择一个未来的日期和时间作为倒计时的目标。
  2. 开始倒计时:当用户点击开始按钮时,应用程序会解析用户输入的日期和时间,并通过计算得出距离目标时间还剩余多少时间。然后,应用程序会启动一个计时器,并开始倒计时。
  3. 更新倒计时标签:倒计时过程中,应用程序会实时更新一个标签,显示剩余的天数、小时、分钟和秒数。
  4. 时间到达提示:当倒计时结束时,应用程序会弹出一个提示框,提示用户时间已到。

步骤二:应用程序的实现

界面设计、

我们使用 Windows 窗体设计器工具创建了一个窗体,并添加了日期选择器、开始按钮、停止按钮和一个用于显示倒计时的标签。
在这里插入图片描述

事件处理

我们为开始按钮的点击事件、停止按钮的点击事件和计时器的 Tick 事件编写了相应的事件处理方法。在开始按钮的点击事件中,我们解析用户输入的日期和时间,并启动计时器。在计时器的 Tick 事件中,我们更新剩余时间并更新倒计时标签。当时间到达时,我们停止计时器并弹出提示框。
定义全局变量

        private DateTime targetDateTime; // 目标日期和时间private TimeSpan remainingTime; // 剩余时间private bool isCountingDown = false; // 是否正在计时

开始按钮button

 private void startButton_Click(object sender, EventArgs e){if (isCountingDown){MessageBox.Show("计时器已经在运行。");return;}// 解析用户输入的日期和时间if (!DateTime.TryParse(dateTimePicker1.Value.ToString(), out targetDateTime)){MessageBox.Show("无效的日期格式,请输入有效的日期。");return;}// 检查是否选择了未来的日期和时间TimeSpan timeDifference = targetDateTime - DateTime.Now;if (timeDifference.TotalSeconds <= 0){MessageBox.Show("请选择一个未来的日期和时间。");return;}DateTime selectedDateTime = dateTimePicker1.Value;// 开始倒计时计时器并记录剩余时间remainingTime = timeDifference;timer1.Start();isCountingDown = true;startButton.Enabled = false;stopButton.Enabled = true;}

停止按钮button

  private void stopButton_Click(object sender, EventArgs e){timer1.Stop(); // 停止计时器isCountingDown = false;startButton.Enabled = true;stopButton.Enabled = false;}

计算button

 private void calculateButton_Click(object sender, EventArgs e){// 解析用户输入的日期和时间if (!DateTime.TryParse(dateTimePicker1.Value.ToString(), out DateTime selectedDate)){MessageBox.Show("格式错误");return;}// 检查是否选择了未来的日期和时间TimeSpan timeDifference = selectedDate - DateTime.Now;if (timeDifference.TotalSeconds < 0){MessageBox.Show("请选择未来的时间");return;}// 计算时间差并显示结果resultLabe2.Text = string.Format("{0} 天, {1} 小时, {2} 分, {3} 秒",timeDifference.Days,timeDifference.Hours,timeDifference.Minutes,timeDifference.Seconds);}

时间处理

我们使用 .NET Framework 提供的 DateTime 和 TimeSpan 类来处理日期和时间。我们解析用户输入的日期和时间,并计算出距离目标时间还剩余多少时间。

        private void timer1_Tick(object sender, EventArgs e){remainingTime = remainingTime.Subtract(TimeSpan.FromSeconds(1)); // 更新剩余时间if (remainingTime.TotalSeconds <= 0){MessageBox.Show("Time's up!");stopButton_Click(sender, e); // 时间到了,停止计时器}UpdateTimerLabel(); // 更新计时器标签}
        private void UpdateTimerLabel(){timerLabel.Text = string.Format("{0}天;{1}小时:{2}分:{3}秒",remainingTime.TotalDays.ToString("000"),remainingTime.Hours.ToString("00"),remainingTime.Minutes.ToString("00"),remainingTime.Seconds.ToString("00"));}

注意:需要引入timer

在这里插入图片描述

运行结果

在这里插入图片描述

在使用这个应用程序时,你可以选择一个未来的日期和时间作为目标,然后点击开始按钮开始倒计时。应用程序会实时更新倒计时标签,直到时间到达时弹出提示框。

这篇关于使用 C# Winfrom编写倒计时功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/579328

相关文章

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

prometheus如何使用pushgateway监控网路丢包

《prometheus如何使用pushgateway监控网路丢包》:本文主要介绍prometheus如何使用pushgateway监控网路丢包问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录监控网路丢包脚本数据图表总结监控网路丢包脚本[root@gtcq-gt-monitor-prome

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected