0

我有一个 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。

我尝试搜索,但找不到任何相关内容。非常感谢 !

4

4 回答 4

2

启动计时器时将当前时间保存到字段:

_startTime = DateTime.Now;
timer.Start();

并稍后计算差异:

void Timer_Tick(object sender, EventArgs e)
{
    this.textBox1.Text = (DateTime.Now - _startTime).ToString(@"mm\:ss");
}
于 2012-12-03T20:06:48.343 回答
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();
    }
}
于 2012-12-03T20:12:49.410 回答
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();
    }
于 2012-12-03T20:06:21.823 回答
0

您可以在启动计时器时存储 DateTime.Now,然后在每个计时器滴答处理程序中计算 DateTime.Now 和存储的开始日期之间经过的时间。如果您有暂停,您还需要跟踪游戏暂停的时间。

考虑到上述方法的不便之处,我建议您在某处声明一个StopWatch,在您调用 timer.Start 的位置实例化并启动它,然后在您的计时器滴答中读取 StopWatch 的 Elapsed 属性。如果需要,您甚至可以停止和启动(暂停)它。

于 2012-12-03T20:07:04.070 回答