1

フォームに Timer1 があり、10 秒に設定されています。

KeyDown イベントがあります。ユーザーが「Enter」を押すと、終了する前に 10 秒間隔で経過した時間を「ans」に保存したいと思います。

例: timer1 を今開始し、3 秒後に Enter キーを押すと、ans = 3 になります。何もキーを押さなかった場合、ans は 10 になります。

私はこのコードを持っています:

    if (e.KeyCode == Keys.Enter)
    {
        ResponseTimeList.Add(timer1.Interval);
    }

*ResponseTimeList は:

public List<double> ResponseTimeList = new List<double>();

どうすれば改善できますか?

ありがとう。

4

2 に答える 2

4

まず、タイマーは使いたいものではありません。timer クラスは、事前定義された時間間隔でイベントを発生させるように設計されています。たとえば、タイマーを使用して、フォームのテキスト ボックスを 10 秒ごとに更新することができます。

代わりに、ストップウォッチ (System.Diagnostics.Stopwatch) を使用します。計時を開始したいときはいつでも Stopwatch.Start() を呼び出します。ユーザーが Enter キーを押したら、単純に Stopwatch.Stop() を呼び出して、経過した時間間隔を秒単位で取得します。

最後に、10 秒のロジックでは、次のようなもの (条件付き評価) を使用する必要があります。

var timeToDisplay = Stopwatch.ElapsedMilliseconds > 10000 ? 10 : Stopwatch.ElapsedMilliseconds/1000
于 2012-12-18T15:59:46.807 に答える
0

Timer のTickイベントを利用できます。

bool isPressed = false;
Timer timer1 = new Timer() { Interval = 10000};

timer1.Tick += (s, e) => 
{ 
    if (!isPressed)
        ResponseTimeList.Add(timer1.Interval);

    isPressed = false;
};

そしてキーが押されたとき:

if (e.KeyCode == Keys.Enter)
{
    ResponseTimeList.Add(timer1.Interval);
    isPressed = true;
}
于 2012-12-18T16:12:24.500 に答える