0

フォームにはさまざまなボタンがあり、ボタンを押すたびにアクションが関連付けられます。ボタンが押されてから離されるまでの時間(ミリ秒単位)を測定したいのですが、ボタンごとにどのように行うことができますか。

4

3 に答える 3

7

Form_Loadイベントでは、すべてのボタンを繰り返し、各ボタンにStopwatchを動的にアタッチしてから、MouseDownイベントとMouseUpイベントを処理できます。

this.Controls.OfType<Button>().ToList().ForEach(button =>
{
    button.Tag = new Stopwatch();
    button.MouseDown += new MouseEventHandler(button_MouseDown);
    button.MouseUp += new MouseEventHandler(button_MouseUp);
});

そして機能:

void button_MouseUp(object sender, MouseEventArgs e)
{
    Stopwatch watch = ((sender as Button).Tag as Stopwatch);
    watch.Stop();
    MessageBox.Show("This button was clicked for " + watch.Elapsed.TotalMilliseconds + " milliseconds");
    watch.Reset();
}

void button_MouseDown(object sender, MouseEventArgs e)
{
    ((sender as Button).Tag as Stopwatch).Start();
}
于 2012-12-18T12:03:09.470 に答える
2

StopWatchを使用して期間を測定するか、無料のオプションもあるEquatecなどのパフォーマンスプロファイラーを使用できます。

StopWatch相対的なStartNewおよびStopmthodsは、イベントハンドラーの前と最後に挿入できます。

于 2012-12-18T11:59:21.250 に答える
1

ダウンイベントのととアップイベントのKeyDownとをキャプチャする必要があります。MouseDownKeyUpMouseUp

    public Form1()
    {
        InitializeComponent();
        button1.KeyDown += new KeyEventHandler(button1_down);
        button1.MouseDown+=new MouseEventHandler(button1_down);

        button1.KeyUp += new KeyEventHandler(button1_Up);
        button1.MouseUp += new MouseEventHandler(button1_Up);
    }

    void button1_down(object sender, EventArgs e)
    {
        Console.WriteLine(DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond);
    }

    private void button1_Up(object sender, EventArgs e)
    {
        Console.WriteLine(DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond);
    }
于 2012-12-18T12:04:42.277 に答える