注意:这个问题也与此问题有关
我有一个计时器,它由一个启动所谓活动倒计时的按钮激活。但是我有一个问题,当我再次按下相同的按钮时,程序必须使用另一个时间(在数据网格内指定)并再次开始倒计时,如果我再次按下按钮,再过一次等等。
我应该使用多个计时器,还是有一种方法可以使用相同的计时器,但如果我按下按钮会有新的(“重置”)值?
(如果你们想要我展示更多的代码,请告诉我我会在这里发布)
private bool timeSet2 = false;
int f = 1;
private void timer3_Tick(object sender, EventArgs e)
{
DateTime timeConvert;
DateTime dateTime = DateTime.Now;
string timeOp = dataGridView1.Rows[f].Cells[2].Value + "";
f++;
if (!timeSet2) // only get the value once
{
DateTime.TryParse(timeOp, out timeConvert);
milliSecondsLeft = (int)timeConvert.TimeOfDay.TotalMilliseconds;
timeSet2 = true;
}
milliSecondsLeft = milliSecondsLeft - 1000;
if (milliSecondsLeft > 0)
{
var span = new TimeSpan(0, 0, 0, 0, milliSecondsLeft);
lblLeft.Text = span.ToString(@"hh\:mm\:ss");
}
else
{
timer3.Stop();
}
我需要在这里放一个按钮,所以如果按下它,我的程序将开始另一个倒计时。但我不知道我是否还要为此创造另一个时间。
答案 0 :(得分:1)
您可以使用相同的计时器并为每次倒计时重置它。但我认为你误解了计时器的功能。每次计时器的间隔过去时都会发生timer_Tick
事件。更新按钮点击事件的milliSecondsLeft
变量。
您必须将一些代码移至button_Click
事件。
private void button1_Click(object sender, EventArgs e)
{
milliSecondsLeft = Convert.ToInt32(dataGridView1.Rows[f].Cells[2].Value)*1000;
f++;
timer3.Start();
}
您的timer_Tick
事件将如下所示:
private void timer3_Tick(object sender, EventArgs e)
{
milliSecondsLeft = milliSecondsLeft - 1000;
if (milliSecondsLeft > 0)
{
var span = new TimeSpan(0, 0, 0, 0, milliSecondsLeft);
lblLeft.Text = span.ToString(@"hh\:mm\:ss");
}
else
{
timer3.Stop();
}
}
其他一些事情:
dataGridView
int f = 1;
的第二列开始吗?
dataGridView
中的倒计时时间为秒。但也许你的代码适合你的目的