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
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と保存された開始日の間の経過時間を計算できます。一時停止している場合は、ゲームが一時停止されている時間も追跡する必要があります。

上記の方法の不便さを考慮して、どこかでストップウォッチを宣言し、タイマーを呼び出す場所でインスタンス化して開始することをお勧めします。開始してから、タイマーティックでストップウォッチのElapsedプロパティを読み取ります。必要に応じて、停止して開始(一時停止)することもできます。

于 2012-12-03T20:07:04.070 に答える
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 に答える