自定义计时器和时差



我是C#的新手,我正在尝试制作一个自定义计时器,它由两个标签(label1和label2)和一个按钮(暂停/播放)组成,前者显示时间字符串(时间和时间0/time1),后者在每次点击时将文本从暂停更改为播放,反之亦然。Label1显示由datetime.now(hhmmss)生成的字符串var时间,label2显示时间0,单击按钮"暂停"并再次单击"播放"后,它将显示时间1(时间1由以下公式计算)。

它执行以下操作:

  1. 获取system datetime.now(hhmmss),将其保存在time字符串中,并在标签1中显示
  2. 按下暂停按钮,将time的值保存在另一个字符串time0中,并在标签中显示其停止。2
  3. 按下播放按钮,开始与标签1的时间不同步的标签2的时间(time1

要计算时间1,我想使用以下公式:

time1=DateTime.Now-(DateTime.Now和time0之间的差异)-1秒)

我被困在第三点上,因为我不知道如何计算两个字符串之间的时间差,并使用新的时间time1作为标签2和下一次单击的文本。

这是我的实际代码,任何帮助都将不胜感激,谢谢。

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;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        //time0
        public int hh = 0;
        public int mm = 0;
        public int ss = 0;
        //time
        public string time = "";
        public string time0 = ""; 
        public bool IsPause = true;
        public Timer t = new Timer();
        public Form1()
        {
            InitializeComponent();
        }
        private void label1_Click(object sender, EventArgs e)
        {
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            //timer interval
            t.Interval = 1000;  //in millisecondi
            t.Tick += new EventHandler(this.t_Tick);
            //start timer form loads
            t.Start();  //questo userà il metodo t_Tick()
        }
        //timer eventhandler
        private void t_Tick(object sender, EventArgs e) 
        { 
            //get current time
            hh = DateTime.Now.Hour;
            mm = DateTime.Now.Minute;
            ss = DateTime.Now.Second;
            //padding leading zero
            if(hh < 10)
            {
                time += "0" + hh;
            }
            else
            {
                time += hh;
            }       
            time += ":";
            if(mm < 10)
            {
                time += "0" + mm;
            }
            else
            {
                time += mm;
            }
            time += ":";
            if (ss < 10)
            {
                time += "0" + ss;
            }
            else
            {
                time += ss;
            }
            //update labels
            label1.Text = time;
            if (IsPause == false) label2.Text = time0;
            else label2.Text = time;
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "pause")
            {
                IsPause = false;
                button1.Text = "play"; 
                time0 = label1.Text;                           
            }
            else
            {
                IsPause = true;
                button1.Text = "pause";              
            }
        }
    }
}

听起来,您最好将时间保存在控件中,并将时间保存为字符串。Tag属性就是为了这个目的而存在的。看见https://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag%28v=vs.110%29.aspx

因此,例如,如果您将正在使用的DateTime设置为label2.Tag中的时间,并将其格式化为label2.text中的文本,则可以将其称为DateTime。然后,当你需要从中计算时,你可以使用

DateTime.Subtract-请参阅https://msdn.microsoft.com/en-us/library/8ysw4sby%28v=vs.110%29.aspx

以确定经过的时间。

因此,要将其引用到您的代码中,无论您在哪里都有这样的代码,其中时间是您从DateTime实例创建的字符串:

label1.Text = time;

您还需要这样设置时间(DateTime.Now就是一个例子,您应该选择用于格式化时间字符串的任何内容):

label1.Tag = DateTime.Now

然后,当你想知道标签1中的时间时,这样做:

DateTime t = (DateTime)label1.Tag

相关内容

  • 没有找到相关文章

最新更新