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

news2024/11/19 1:24:43

在日常生活中,我们经常需要倒计时来提醒自己重要的时间节点,比如倒计时到达一个特定的日期和时间。介绍一个使用 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

在这里插入图片描述

运行结果

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1362863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Wrk压测发送Post请求的正确姿势

一、Wrk简介 wrk 是一个能够在单个多核 CPU 上产生显著负载的现代 HTTP 基准测试工具。它采用了多线程设计&#xff0c;并使用了像 epoll 和 kqueue 这样的可扩展事件通知机制。此外&#xff0c;用户可以指定 LuaJIT 脚本来完成 HTTP 请求生成、响应处理和自定义报告等功能。 …

个人笔记:分布式大数据技术原理(二)构建在 Hadoop 框架之上的 Hive 与 Impala

有了 MapReduce&#xff0c;Tez 和 Spark 之后&#xff0c;程序员发现&#xff0c;MapReduce 的程序写起来真麻烦。他们希望简化这个过程。这就好比你有了汇编语言&#xff0c;虽然你几乎什么都能干了&#xff0c;但是你还是觉得繁琐。你希望有个更高层更抽象的语言层来描述算法…

1-01初识C语言

一、概述 C语言是贝尔实验室的Ken Thompson&#xff08;肯汤普逊&#xff09;、Dennis Ritchie&#xff08;丹尼斯里奇&#xff09;等人开发的UNIX 操作系统的“副产品”&#xff0c;诞生于1970年代初。 Thompson和Ritchie共同创作完成了Unix操作系统&#xff0c;他们都被称为…

操作系统----期末单选题

目录 操作系统----期末单选题 一、单选题 操作系统----期末单选题 一、单选题 1&#xff0e; 采用分段存储管理的系统中&#xff0c;若地址用24位表示&#xff0c;其中8位表示段内地址&#xff0c;则允许分段的最大个数是&#xff08; &#xff09;。 A、224 B、216 …

docker安装nodejs,并更改为淘宝源

拉取官方 Node.js 镜像 docker pull node:latest创建 Dockerfile&#xff0c;并更改 NPM 下载源为淘宝源&#xff0c;设置为全局持久化 # 使用最新版本的Node.js作为基础镜像 FROM node:latest# 设置工作目录为/app WORKDIR /app # 更改 NPM 下载源为淘宝源&#xff0c;并设置…

C#不会循环响应的Action设计与实现

目录 一、简述二、测试代码三、测试的输出四、核心代码五、其它 一、简述 特点&#xff1a; 不光是能防止直接的死循环调用&#xff1b;还能防止间接的死循环调用&#xff1b;还支持对不同参数判定&#xff0c;不同参数的调用可以不当循环调用&#xff1b; 消息事件系统中必…

学习笔记——C++运算符之逻辑运算符

作用&#xff1a;用于根据表达式的真值返回真值或假值 逻辑运算符有以下符号&#xff1a; #include<bits/stdc.h> using namespace std; int main(){// 逻辑运算符 非 !int a10;//在c中&#xff0c;除了0均是真 cout<<!a<<endl;//0 cout<<!!a<<…

2023年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:统计指定范围里的数 给定一个数的序列S,以及一个区间[L, R], 求序列中介于该区间的数的个数,即序列中大于等于L且小于等于R的数的个数。 时间限制:1000 内存限制:65536 输入 第一行1个整数n,分别表示序列的长度。(0 < n ≤…

SpringSecurity深度学习

SpringSecurity简介 spring Security是什么&#xff1f; Spring Security 是一个强大且高度可定制的身份验证和访问控制框架&#xff0c;用于保护基于Spring的应用程序。它是Spring项目的一部分&#xff0c;旨在为企业级系统提供全面的安全性解决方案。 一个简单的授权和校验…

idea2023连接gitee远程仓库

目录 1.在gitee创建远程仓库 2.在Idea里配置git 3.初始化本地仓库 4. 提交推送至远程仓库 注意&#xff1a;提前下好git工具、idea2023&#xff0c;注册gitee账号&#xff0c;本文不介绍 1.在gitee创建远程仓库 创建好后&#xff0c;复制远程仓库地址 2.在Idea里配置git ​ …

分布式【Zookeeper】

1.1 ZooKeeper 是什么 ZooKeeper 是 Apache 的顶级项目。ZooKeeper 为分布式应用提供了高效且可靠的分布式协调服务&#xff0c;提供了诸如统一命名服务、配置管理和分布式锁等分布式的基础服务。在解决分布式数据一致性方面&#xff0c;ZooKeeper 并没有直接采用 Paxos 算法&…

视图与索引连表查询(内/外联)和子查询

目录 一、视图 1.1、概念&#xff1a; 1.2、场景&#xff1a; 1.3、用视图的意义 1.2、创建(增加)视图 1.3、修改视图 1.4、删除视图 1.5、查看视图 ​编辑 二、索引 2.1、概念 2.2、优缺点 优点&#xff1a; 缺点&#xff1a; 2.3、应用场景 2.4、会失效 2.5、…

项目框架构建之3:Nuget服务器的搭建

本文是“项目框架构建”系列之3&#xff0c;本文介绍一下Nuget服务器的搭建&#xff0c;这是一项简单的工作&#xff0c;您或许早已会了。 1.打开vs2022创建Asp.net Web应用程序 框架选择.net framework4.8&#xff0c;因为nuget服务器只支持.net framework。 2.选择空项目和保…

Docker nginx容器代理播放m3u8视频文件(HLS)

文章目录 Docker Nginx容器代理播放M3U8文件教程获取Nginx Docker镜像设置Nginx配置文件用 ffmpeg 将 MP4 文件转换成 m3u8 文件运行Docker容器测试M3U8流其他问题我用vlc都能播放http://192.168.121.50/forest4kTest.m3u8和http://192.168.121.50/forest4kTest.mp4&#xff0c…

如何安装和使用夜神模拟器连接Android Studio

目录 简介 一、安装 二、使用 三、更多资源 简介 夜神模拟器是一款在Windows平台上运行的Android模拟器软件。它能够模拟Android操作系统环境&#xff0c;让用户在电脑上轻松体验Android应用程序。夜神模拟器的功能强大&#xff0c;可以满足各种需求&#xff0c;无论是娱乐…

QT----Visual stdio翻金币案例,附源码

历经一个月&#xff0c;各种事情磕磕绊绊&#xff0c;终于结束了&#xff0c;自己还是太菜了 案例的文档写的教程已经很详细&#xff0c;这边主要是记录一些问题 github代码 gitee代码 1、图片无法加载 一开始加载首页图片和标题出不来&#xff0c;结果是paintEvent重写的字打…

【LMM 014】NExT-GPT:能够输入和生成任意模态的多模态大模型

论文标题&#xff1a;NExT-GPT:Any-to-Any Multimodal Large Language Model 论文作者&#xff1a;Shengqiong Wu, Hao Fei*, Leigang Qu, Wei Ji, Tat-Seng Chua 作者单位&#xff1a; NExT Lab, National University of Singapore 论文原文&#xff1a;https://arxiv.org/abs…

线性代数 --- 为什么LU分解中L矩阵的行列式一定等于正负1?

以下是关于下三角矩阵L的行列式一定等于-1的一些说明 笔者的一些话(写在最前面)&#xff1a; 这是一篇小文&#xff0c;是我写的关于求解矩阵行列式的一篇文章中的一部分。之所以把这一段专门提溜出来&#xff0c;是因为这一段相对于原文是可以完全独立的&#xff0c;也是因为我…

RocketMQ 投递消息方式以及消息体结构分析:Message、MessageQueueSelector

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

条件竞争之文件上传

一、条件竞争介绍 条件竞争,在程序员日常的Web应用开发中&#xff0c;通常不如其他漏洞受到的关注度高。因为普遍的共识是&#xff0c;条件竞争是不可靠的&#xff0c;大多数时候只能靠代码审计来识别发现&#xff0c;而依赖现有的工具或技术很难在黑盒灰盒中识别并进行攻击。…