0

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

它执行以下操作:

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

要计算time1我想使用这个公式:

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

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

这是我的实际代码,任何帮助完成它都非常感谢,谢谢。

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";              
            }
        }
    }
}
4

1 回答 1

1

听起来好像您最好将时间保存在控件中以及将时间保存为字符串。Tag 属性就是为此目的而存在的。请参阅https://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag%28v=vs.110%29.aspx

因此,例如,如果您在 label2.Tag 中将使用的 DateTime 设置为与在 label2.Text 中将其格式化为文本的时间相同,那么您可以将其称为 DateTime。然后,当您需要从中计算时,您可以使用

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

来确定经过的时间。

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

label1.Text = time;

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

label1.Tag = DateTime.Now

然后,当您想知道 label1 中的时间时,请执行以下操作:

DateTime t = (DateTime)label1.Tag
于 2015-02-09T11:22:44.787 回答