背景:
       家中小朋友刚上一年级,每天放学后,学校班主任留作业要求打卡并上传视频。陪同打卡,是心累的。想着能否让其在设定时间内自主打卡,于是就有了这个想法,做一个简单显示时间的东西。

需求:
     1.使用C# winform;
     2.能够启动定时,能够停止定时;
     3.能够倒数显示时间,以时、分、秒的格式;
     4.能够设定计时时间;
     以上便是我的一个基本需求。

我会什么:
      我最近只从w3cschool上浅浅的读了一下C#的语法;从CSDN上一个博主那里简单的了解下winform,没做过一个项目;这样看来,我似乎什么都不会。。。

干中学:
AI这么发达,试试用AI吧;
我把需求详尽了下,发给了千问。。。

就这样,下面便是简单的界面:

下面是调试后的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlTypes;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace daka
{
    public partial class Form1 : Form
    {
        private int totalSeconds = 0;

        public Form1()
        {
            InitializeComponent();

            // 1. 初始化下拉框选项(5分钟到24小时)
            InitializeTimeOptions();
        }

        /// <summary>
        /// 初始化时间下拉框
        /// </summary>
        private void InitializeTimeOptions()
        {
            // 添加 5, 10, 15, 20 分钟
            for (int i = 5; i <= 20; i += 5)
            {
                cmbTime.Items.Add($"{i} 分钟");
            }

            // 添加 30 分钟到 24 小时
            for (int i = 30; i <= 1440; i += 30)
            {
                cmbTime.Items.Add($"{i} 分钟");
            }

            cmbTime.SelectedIndex = 0;
        }

        /// <summary>
        /// 启动/停止 按钮点击事件
        /// </summary>
        private void btnStartStop_Click(object sender, EventArgs e)
        {
            if (timer1.Enabled)
            {
                // 如果定时器正在运行,点击则停止
                StopTimer();
            }
            else
            {
                // 如果定时器未运行,点击则启动
                StartTimer();
            }
        }

        /// <summary>
        /// 启动计时逻辑
        /// </summary>
        private void StartTimer()
        {
            // 从下拉框提取分钟数
            string selectedText = cmbTime.SelectedItem.ToString();
            int minutes = int.Parse(selectedText.Replace(" 分钟",""));

            totalSeconds = minutes * 60;

            // 防止在计时过程中修改时间
            cmbTime.Enabled = false;
            btnStartStop.Text = "停止计时";

            // 立即刷新一次显示,避免点击后等1秒才变化
            UpdateDisplay();
            timer1.Start();
        }

        /// <summary>
        /// 停止计时逻辑
        /// </summary>
        private void StopTimer()
        {
            timer1.Stop();
            cmbTime.Enabled = true;
            btnStartStop.Text = "启动计时";
            lblDisplay.Text = "00:00:00";
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            totalSeconds--;

            if (totalSeconds <= 0)
            {
                // 倒计时结束
                totalSeconds = 0;
                UpdateDisplay();
                StopTimer();

                // 提示用户(可替换为蜂鸣声或弹窗)
                MessageBox.Show("打卡时间到!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                //正常倒计时
                UpdateDisplay();
            }
        }

        /// <summary>
        /// 格式化并更新显示框 (HH:mm:ss)
        /// </summary>
        private void UpdateDisplay()
        {
            int hours = totalSeconds / 3600;
            int minutes = (totalSeconds % 3600) / 60;
            int seconds = totalSeconds % 60;

            // 使用 PadLeft 保证个位数时前面补0,例如 09:05:01
            lblDisplay.Text = $"{hours.ToString().PadLeft(2, '0')}:" +
                              $"{minutes.ToString().PadLeft(2, '0')}:" +
                              $"{seconds.ToString().PadLeft(2, '0')}";
        }
    }
}

下面是成品图:

可以设定时间,可以根据需要修改代码。

启动定时后开始进行倒数计时。

收获:
从AI学习编码,没想到还成功了。对winform及操作函数有了一个简单了解,其它的收获就不再啰嗦了,个中体会吧。

源码链接:(整理好后会放到这里)

下一个,做个什么呢,还没想好。。。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐