我有一个C#游戏,我需要允许锦标赛模式,每轮将是2分钟。如何在表格上显示从0:00到2:00的时间?
我在构造函数中有这个:
Timer timer = new Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(Timer_Tick);
timer.Start();
这是事件处理程序
void Timer_Tick(object sender, EventArgs e)
{
this.textBox1.Text = DateTime.Now.ToLongTimeString();
}
但是我不知道如何从当前时间0:00开始的时间开始..我尝试创建一个DateTime实例但是当我做myDateTime.ToString();在事件处理程序中,它只是0:00。
我试过搜索,但找不到任何相关内容。 非常感谢!
答案 0 :(得分:2)
启动计时器时将当前时间保存到字段:
_startTime = DateTime.Now;
timer.Start();
稍后计算差异:
void Timer_Tick(object sender, EventArgs e)
{
this.textBox1.Text = (DateTime.Now - _startTime).ToString(@"mm\:ss");
}
答案 1 :(得分:0)
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
Thread.Sleep(10000);
stopWatch.Stop();
// Get the elapsed time as a TimeSpan value.
TimeSpan ts = stopWatch.Elapsed;
// Format and display the TimeSpan value.
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds / 10);
void Timer_Tick(object sender, EventArgs e)
{
label1.Text = stopWatch.ElapsedTicks.ToString();
}
答案 2 :(得分:0)
您可以在启动计时器时存储DateTime.Now,然后在每个计时器刻度处理程序中计算DateTime.Now与存储的开始日期之间经过的时间。如果你有暂停,你还需要跟踪游戏暂停的时间。
考虑到上述方法的不便之处,我建议你在某处声明一个StopWatch,实例化并在你调用timer.Start的地方启动它,然后在你的计时器滴答中只读取StopWatch的Elapsed属性。如果需要,您甚至可以停止并开始(暂停)它。
答案 3 :(得分:0)
您需要一个成员变量,它在定时器初始化和Timer_Tick事件处理程序的作用域内。
class Something
{
DateTime _myDateTime;
Timer _timer;
public Something()
{
_timer = new Timer();
_timer.Interval = 1000;
_timer.Tick += Timer_Tick;
_myDateTime = DateTime.Now;
_timer.Start();
}
void Timer_Tick(object sender, EventArgs e)
{
var diff = DateTime.Now.Subtract(_myDateTime);
this.textBox1.Text = diff.ToString();
}
}