あまりの猛暑で外出た瞬間終わったあんみんどうふです。
フォームアプリケーションでクリックすると何らかの処理を行わせる時、クリックで発火するつもりなので基本的にはClickイベントを使うと思います。
これを画像(PictureBox)で行う場合、Clickイベントを使うと左クリック連打した時に実行される頻度がいまいち遅く感じます・・・。
1 2 3 4 | private void pictureBox1_Click(object sender, EventArgs e) { Debug.WriteLine($"Clickした {DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss.ffff")}"); } |
だいたい0.3秒間隔。体感できるレベルの長さ・・・。
結論: MouseDownを使え
原因は2回に1回、空のDoubleClickイベントが発火しているため。
Clickで実行する内容をDoubleClickにそのままコピペしたり実行先のメソッドを同じにしてもいいのですがあまりスマートではないです。
ということでMouseDownの出番。マウスボタン押下時に発火するので、左クリックを判別すればClickイベントと同じような処理ができます。
1 2 3 4 5 | private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) Debug.WriteLine($"MouseDownした {DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss.ffff")}"); } |
仕事中に不思議がられない程度に連打して0.1秒前後。
頑張ればもっと短い間隔でできますが、変な目で見られそうなのでこれくらいにします。
DoubleClickが発火していたのはWindowsフォームの仕様?Visual Studioのお節介?詳しいことはわかりませんがどちらにしろMouseDownで全部潰せるので解決!以上。
PictureBoxに使用した画像は「いらすとや」の「ヨグ=ソトースのイラスト」をお借りしました。