C# 3.0のWindowアプリケーションを書いている時に遭遇した問題に関するメモ。
フォーム上にコントロールを作成し、タイマーでvisibleプロパティを定期的にオンオフしているとします。コントロールとフォームの双方にClickイベントを設定しているとします。ここで、実際にマウスを用いてクリックを行うと、(ダブルクリックと認識される2回連続操作を行わない限り)、フォームかコントロールのどちらかのイベントが確実に実行されるかのように思えます。
しかし、実際にはイベントが実行されないケースがあります。
おそらく、コントロール上でマウスダウンが認識された後、それがクリックであると認識されるまでの間にコントロールが非表示になると、マウスボタンが押された事実が行き場を失って消失してしまうと思われます。
VB6でも同じだった §
.NET Framework固有の現象かと思いきや。VB6で軽くテストプログラムを作成してみると同じ現象が起こりました。昔からある問題のようです。
解決策 §
MouseDownイベントを使えば確実にマウスボタンが押されたことをキャッチできます。
もちろん、それを使うとクリックとダブルクリックの使い分け等はできませんが。
以上、時間がないのでメモのみ。検証ソース等は割愛。