我是C#的新手,我正在尝试制作一个由两个标签(label1和label2)组成的自定义计时器,它们显示时间字符串(时间和时间0 /时间1)和一个按钮(暂停) / play)将其文本从暂停变为播放,反之亦然。 Label1显示时间是由datetime.now(hhmmss)创建的字符串,label2显示time0,然后单击按钮"暂停"再一次" play"它将显示time1(时间1由下面的公式计算)。
它执行以下操作:
要计算 time1 ,我想使用此公式:
time1 = DateTime.Now - ((DateTime.Now和 time0 之间的差异) - 1秒)
我坚持第3点,因为我不知道如何处理两个字符串之间的时差,并使用新的时间 time1 作为label2和next次点击的文本
这是我的实际代码,任何帮助完成它都表示感谢,谢谢。
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";
}
}
}
}
答案 0 :(得分:1)
听起来好像你最好节省控件中的时间以及作为字符串的时间。 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
确定经过的时间。
因此,要将此引用到您的代码中,无论您拥有这样的代码,其中time是您从DateTime实例创建的字符串:
label1.Text = time;
你还需要像这样设置时间(DateTime.Now是一个例子,你应该选择你用来格式化时间字符串的任何东西):
label1.Tag = DateTime.Now
然后,如果您想知道label1中的时间,请执行以下操作:
DateTime t = (DateTime)label1.Tag