C# 如何创建高级倒计时计时器
这个问题和这个有关,所以你们可以更好地理解它C# 如何创建高级倒计时计时器,c#,winforms,variables,timer,countdown,C#,Winforms,Variables,Timer,Countdown,这个问题和这个有关,所以你们可以更好地理解它 我的答复是: 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(v
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();
根据我在那里写的答案,我想知道是否有一种方法可以将其应用于计时器,并将数据网格值(转换)转换为计时器值。所以如果我按下按钮,他们开始倒计时
我已尝试在计时器中插入以下代码:
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();
}
}
如果没有倒计时或其他什么,是否有人知道我应该做什么或为什么它不起作用?时间的价值永远不会改变,因为你每次都会重新创建它 要解决这个问题,您必须在
勾选
事件之外声明递减的变量
将这两个变量放在表单上:
private int milliSecondsLeft = 0;
private bool timeSet = false;
然后将“勾号”事件更改为:
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();
}
}
确保时间的值永远不会更改,因为您每次都会重新创建它 要解决这个问题,您必须在
勾选
事件之外声明递减的变量
将这两个变量放在表单上:
private int milliSecondsLeft = 0;
private bool timeSet = false;
然后将“勾号”事件更改为:
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();
}
}
确保您能显示启动计时器的代码吗?我按下按钮时会出现这种情况。忘了把这个放在上面,但还是什么也没发生。你还能给我看看吗?你应该仍然可以编辑你的问题。timer2\u勾选或者你是指某个timer2\u开始?@BobC我想你指的是这个
timer2\u开始()
?你能显示你启动计时器的代码吗?当我按下按钮时会发生这种情况。忘了把这个放在上面,但还是什么也没发生。你还能给我看看吗?你应该仍然可以编辑你的问题。timer2\u勾选或者你是指某个timer2\u开始?@BobC我想你的意思是timer2\u开始()
?我会检查一下并给你反馈。很高兴听到这个消息。请花些时间来理解它为什么会起作用,以后它会帮你省去头疼。我会检查一下并给你反馈。很高兴听到。请花点时间来理解它为什么会起作用,它会在以后帮你省去头疼。