代码可直接运行
C#计时器在日常生活中经常用到,比如短跑比赛需要计时等。制作了一个简单的闹钟计时器,当用户设置完定时时间之后,如果到了设置的时间,该软件会自动进行提示。
界面搭建如下:
运行界面如下:
思路:
需要两个timer。
timer1用于计算剩余时间
timer2用于使闹钟显示的系统时间与当前系统时间保持一直
numericUpDown空间用于用户设定时间
用户第一次进入时,timer1不工作,当用户设定完时间,点击确定后,timer1开始计时工作。获取系统时间与用户设定的时间,求差值,并且判断用户设定的时间是当天的时间还是第二天的时间。
若是当天时间,直接用求得的差值就可以,若是用户输入的是第二天的时间,则用86400(一天有86400秒)减去两者之间的差
注意:
numericUpDown控制设置好最大值与最小值,小时最小值为0,最大值为23,分钟和秒的最大值是59,最小值是0
ateTime nowtime = Convert.ToDateTime(DateTime.Now.ToString());//获取当前系统时间
DateTime endtime = Convert.ToDateTime(label1.Text.Trim().ToString());//获取用户设定的时间
//求两个时间之间相差的秒数
long dat1 = DateAndTime.DateDiff("s", nowtime, endtime, FirstDayOfWeek.Sunday, FirstWeekOfYear.FirstFourDays);
long dat=0;
if (dat1 < 0)//如果两者相差的秒数小于0,说明此时设定的为第二天的时间
{
dat = dat1+86400;//一天共有86400秒,两者相差的秒数加上一天的秒数,得到当前系统时间与设定的第二天的时间相差的秒数(注意此时dat1 < 0,所以是dat1+86400)
string color = "red";
this.label3.ForeColor = System.Drawing.ColorTranslator.FromHtml(color);//设置文字颜色为红色
label3.Text = ("闹钟已启动\n剩余" + dat + "秒");//提示剩余时间
}
源代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.VisualBasic;
namespace _5_5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)//界面运行时
{
this.Text = "闹钟计时器";//设置界面名称为“闹钟计时器”
string hour = this.numericUpDown1.Value.ToString();//获取“时间定时”区域的小时
string minute = this.numericUpDown2.Value.ToString();//获取“时间定时”区域的分钟
string second = this.numericUpDown3.Value.ToString(); //获取“时间定时”区域的秒
int hour1 = Convert.ToInt32(hour);//将string类型的小时转换为int型的小时
int minute1 = Convert.ToInt32(minute);//将string类型的分钟转换为int型的分钟
int second1 = Convert.ToInt32(second);//将string类型的秒转换为int型的秒
string h = "";//定义小时为个位数的时候的补足位
string m = "";//定义分钟为个位数的时候的补足位
string s = "";//定义秒为个位数的时候的补足位
if (hour1 < 10)//当小时为个位数的时候
{
h = "0";//将小时补足位设为0
}
if (minute1 < 10)//当分钟为个位数的时候
{
m = "0";//将分钟补足位设为0
}
if (second1 < 10)//当秒为个位数的时候
{
s = "0";//将秒补足位设为0
}
string color1 = "green";//定义颜色属性为绿色
this.label1.ForeColor = System.Drawing.ColorTranslator.FromHtml(color1);//设置“时间定时”区域的label1的颜色为绿色
label1.Text = (h+hour + ":" + m + minute + ":" + s + second);//输出“时间定时”区域的时间,显示在label1上
string color = "blue";//定义颜色属性为蓝色
this.label3.ForeColor = System.Drawing.ColorTranslator.FromHtml(color);//设置时钟未启动时的文字颜色为蓝色
label3.Text = "闹钟未启动,\n请设置时间!";//提示用户当前闹钟未启动,暂未设置时间
timer1.Stop();//此时timer1未启动,没有计时功能
}
private void button1_Click(object sender, EventArgs e)//确定按钮点击时,闹钟开始计时
{
string hour = this.numericUpDown1.Value.ToString();//获取“时间定时”区域的小时
string minute = this.numericUpDown2.Value.ToString();//获取“时间定时”区域的分钟
string second = this.numericUpDown3.Value.ToString();//获取“时间定时”区域的秒
int hour1 = Convert.ToInt32(hour);//将string类型的小时转换为int型的小时
int minute1 = Convert.ToInt32(minute);
int second1 = Convert.ToInt32(second);
string h = "";//定义小时为个位数的时候的补足位
string m = "";//定义分钟为个位数的时候的补足位
string s = "";//定义秒为个位数的时候的补足位
if (hour1 < 10)//当小时为个位数的时候
{
h = "0";//将小时补足位设为0
}
if (minute1 < 10)//当小时为个位数的时候
{
m = "0";//将小时补足位设为0
}
if (second1 < 10)//当小时为个位数的时候
{
s = "0";//将小时补足位设为0
}
string color = "green";//设置颜色为绿色
this.label1.ForeColor = System.Drawing.ColorTranslator.FromHtml(color);//此时将“时间定时”区域的label1的颜色设为绿色
label1.Text = (h+hour + ":" +m+ minute + ":" +s+ second);//输出用户设定的时间
timer1.Start();//timer1开始倒计时工作
}
private void timer1_Tick(object sender, EventArgs e)//timer1工作实现功能函数
{
string starhour = DateTime.Now.TimeOfDay.Hours.ToString();//获取系统当前时间的小时
string starminute = DateTime.Now.TimeOfDay.Minutes.ToString();//获取系统当前时间的分钟
string starsecond = DateTime.Now.TimeOfDay.Seconds.ToString();//获取系统当前时间的分钟
//以下操作是为了输出当前系统时间,并且保证输出时间的小时,分钟和秒是两位数,此处不再赘述
int hour1 = Convert.ToInt32(starhour);
int minute1 = Convert.ToInt32(starminute);
int second1 = Convert.ToInt32(starsecond);
string m = "";
string s = "";
string h = "";
if (hour1 < 10)
{
h = "0";
}
if (minute1 < 10)
{
m = "0";
}
if (second1 < 10)
{
s = "0";
}
string color1 = "green";
this.label2.ForeColor = System.Drawing.ColorTranslator.FromHtml(color1);
label2.Text = (h+starhour + ":" + m+starminute + ":" +s+ starsecond);//输出当前系统时间
DateTime nowtime = Convert.ToDateTime(DateTime.Now.ToString());//获取当前系统时间
DateTime endtime = Convert.ToDateTime(label1.Text.Trim().ToString());//获取用户设定的时间
//求两个时间之间相差的秒数
long dat1 = DateAndTime.DateDiff("s", nowtime, endtime, FirstDayOfWeek.Sunday, FirstWeekOfYear.FirstFourDays);
long dat=0;
if (dat1 < 0)//如果两者相差的秒数小于0,说明此时设定的为第二天的时间
{
dat = dat1+86400;//一天共有86400秒,两者相差的秒数加上一天的秒数,得到当前系统时间与设定的第二天的时间相差的秒数
string color = "red";
this.label3.ForeColor = System.Drawing.ColorTranslator.FromHtml(color);//设置文字颜色为红色
label3.Text = ("闹钟已启动\n剩余" + dat + "秒");//提示剩余时间
if (dat == 0)//当剩余时间为0秒时
{
timer1.Stop();//计时器停止工作
MessageBox.Show( "时间到");//提示用户时间到了
}
}
else//若当前设定的时间晚于系统时间
{
string color = "red";
this.label3.ForeColor = System.Drawing.ColorTranslator.FromHtml(color);//设置文字颜色为红色
label3.Text = ("闹钟已启动\n剩余" + dat1 + "秒");//直接输出系统时间与用户设定的时间的差值
if (dat1 == 0)//当剩余时间为0秒时
{
timer1.Stop();//计时器停止工作
MessageBox.Show("时间到");//提示用户时间到了
}
}
}
private void timer2_Tick(object sender, EventArgs e)//用于获取系统时间,并且使输出的系统时间随使都是当前系统的时间
{
string starhour = DateTime.Now.TimeOfDay.Hours.ToString();
string starminute = DateTime.Now.TimeOfDay.Minutes.ToString();
string starsecond = DateTime.Now.TimeOfDay.Seconds.ToString();
int minute = Convert.ToInt32(starminute);
int second = Convert.ToInt32(starsecond);
string m = "";
string s = "";
if (minute < 10)
{
m = "0";
}
if (second < 10)
{
s = "0";
}
string color = "green";
this.label2.ForeColor = System.Drawing.ColorTranslator.FromHtml(color);
label2.Text = (starhour + ":" + m+starminute + ":" + s+starsecond);
}
private void button2_Click(object sender, EventArgs e)//取消按钮点击事件
{
timer1.Stop();//停止倒计时
string color = "yellow";
this.label3.ForeColor = System.Drawing.ColorTranslator.FromHtml(color);
label3.Text = "闹钟已暂停!";//提示用户已经停止计时
}
}
}