我是C#的新手,我正在尝试制作一个自定义计时器,它由两个标签(label1和label2)和一个按钮(暂停/播放)组成,前者显示时间字符串(时间和时间0/time1),后者在每次点击时将文本从暂停更改为播放,反之亦然。Label1显示由datetime.now(hhmmss)生成的字符串var时间,label2显示时间0,单击按钮"暂停"并再次单击"播放"后,它将显示时间1(时间1由以下公式计算)。
它执行以下操作:
- 获取system datetime.now(hhmmss),将其保存在time字符串中,并在标签1中显示
- 按下暂停按钮,将time的值保存在另一个字符串time0中,并在标签中显示其停止。2
- 按下播放按钮,开始与标签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