如何创建高级倒数计时器
How to create an advanced countdown timer
嗯,这个问题跟这个有关系,大家可以更好的理解
我的回答:
txtAtiv.Text = dataGridView1.Rows[0].Cells[1].Value + "";
string value = dataGridView1.Rows[0].Cells[2].Value + "";
lblLeft.Text = value.Split(' ')[1];
textStatus.Text = "";
DateTime timeConvert;
DateTime.TryParse(value, out timeConvert);
double time;
time = timeConvert.TimeOfDay.TotalMilliseconds;
var timeSpan = TimeSpan.FromMilliseconds(time);
lblSoma.Text = timeSpan.ToString();
timer2.Start();
根据我在那里写的答案,我想知道是否有一种方法可以将它应用到计时器并将 DataGrid 值(已转换)转换为计时器值。因此,如果我按下一个按钮,它们就会开始倒计时。
我试过在计时器中插入这段代码:
private void timer2_Tick(object sender, EventArgs e)
{
string timeOp = dataGridView1.Rows[0].Cells[2].Value + "";
DateTime timeConvert;
DateTime dateTime = DateTime.Now;
DateTime.TryParse(timeOp, out timeConvert);
double time;
time = timeConvert.TimeOfDay.TotalMilliseconds;
var timeSpan = TimeSpan.FromMilliseconds(time);
if (time > 0)
{
time = time - 1000; //(millisec)
lblCountdown.text = time.ToString();
}
}
没有倒数或其他任何事情,有人知道我应该做什么或为什么它不起作用吗?
time
的值永远不会改变,因为您每次都重新创建它。
要解决这个问题,您必须在 Tick
事件之外声明您递减的变量。
将这两个变量放在您的表单中:
private int milliSecondsLeft = 0;
private bool timeSet = false;
然后将 'tick' 事件更改为:
private void timer2_Tick(object sender, EventArgs e)
{
if (!timeSet) // only get the value once
{
string dateTimeFromGrid = "4/29/2016 5:00:00 AM"; //hardcoded for simplicity, get the string from your grid
DateTime fromGrid;
DateTime.TryParse(dateTimeFromGrid, out fromGrid);
milliSecondsLeft = (int)fromGrid.TimeOfDay.TotalMilliseconds;
timeSet = true;
}
milliSecondsLeft = milliSecondsLeft - 100; // timer's default Interval is 100 milliseconds
if (milliSecondsLeft > 0)
{
var span = new TimeSpan(0, 0, 0, 0, milliSecondsLeft);
lblCountdown.Text = span.ToString(@"hh\:mm\:ss");
}
else
{
timer2.Stop();
}
}
确保
嗯,这个问题跟这个有关系,大家可以更好的理解
我的回答:
txtAtiv.Text = dataGridView1.Rows[0].Cells[1].Value + "";
string value = dataGridView1.Rows[0].Cells[2].Value + "";
lblLeft.Text = value.Split(' ')[1];
textStatus.Text = "";
DateTime timeConvert;
DateTime.TryParse(value, out timeConvert);
double time;
time = timeConvert.TimeOfDay.TotalMilliseconds;
var timeSpan = TimeSpan.FromMilliseconds(time);
lblSoma.Text = timeSpan.ToString();
timer2.Start();
根据我在那里写的答案,我想知道是否有一种方法可以将它应用到计时器并将 DataGrid 值(已转换)转换为计时器值。因此,如果我按下一个按钮,它们就会开始倒计时。
我试过在计时器中插入这段代码:
private void timer2_Tick(object sender, EventArgs e)
{
string timeOp = dataGridView1.Rows[0].Cells[2].Value + "";
DateTime timeConvert;
DateTime dateTime = DateTime.Now;
DateTime.TryParse(timeOp, out timeConvert);
double time;
time = timeConvert.TimeOfDay.TotalMilliseconds;
var timeSpan = TimeSpan.FromMilliseconds(time);
if (time > 0)
{
time = time - 1000; //(millisec)
lblCountdown.text = time.ToString();
}
}
没有倒数或其他任何事情,有人知道我应该做什么或为什么它不起作用吗?
time
的值永远不会改变,因为您每次都重新创建它。
要解决这个问题,您必须在 Tick
事件之外声明您递减的变量。
将这两个变量放在您的表单中:
private int milliSecondsLeft = 0;
private bool timeSet = false;
然后将 'tick' 事件更改为:
private void timer2_Tick(object sender, EventArgs e)
{
if (!timeSet) // only get the value once
{
string dateTimeFromGrid = "4/29/2016 5:00:00 AM"; //hardcoded for simplicity, get the string from your grid
DateTime fromGrid;
DateTime.TryParse(dateTimeFromGrid, out fromGrid);
milliSecondsLeft = (int)fromGrid.TimeOfDay.TotalMilliseconds;
timeSet = true;
}
milliSecondsLeft = milliSecondsLeft - 100; // timer's default Interval is 100 milliseconds
if (milliSecondsLeft > 0)
{
var span = new TimeSpan(0, 0, 0, 0, milliSecondsLeft);
lblCountdown.Text = span.ToString(@"hh\:mm\:ss");
}
else
{
timer2.Stop();
}
}
确保