フォームにはさまざまなボタンがあり、ボタンを押すたびにアクションが関連付けられます。ボタンが押されてから離されるまでの時間(ミリ秒単位)を測定したいのですが、ボタンごとにどのように行うことができますか。
質問する
3463 次
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
とをキャプチャする必要があります。MouseDown
KeyUp
MouseUp
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 に答える