2008年10月20日月曜日

[.NET]ダブルクリックとクリックのイベントをインプリメントすると、ダブルクリック時にクリックが先に発生する

ちょっと長いタイトルですが、.NET WindowsFormアプリでマウスクリック系のイベントで困ったことが発生しました。というのは、ダブルクリックとクリックをインプリメントすると、ダブルクリック時にクリックも発生してしますのです。

処理の特性上、通常のクリック・ダブルクリックでは問題は発生しないのですが、 キーボードとの組み合わせで、


  • Ctrl+クリック:選択状態を排他的に変更

  • Ctrl+ダブルクリック:編集状態に遷移

という処理をします。この場合ダブルクリックの処理が「選択状態にを排他的に変更+編集状態に遷移」に*見えて*しまうのです。

とりあえず、クリックが排他的な処理であったため、ダブルクリックのときにクリック相当の処理を実行するようにしちゃいました。一瞬ちらつきますが、処理的にはそれらしく動作しているように*見えます*。

もうひとつの対応方法としては、


  1. クリック時にタイマー起動。タイムアウトの設定は、SystemInformation.DoubleClickTimeより取得

  2. ダブルクリックイベントが発生した場合、タイマーを停止する

  3. タイマーのイベントが発生したらクリックの処理をする


です。

しかし、コレを実装するとクリックの処理のパフォーマンスが悪く*見えて*しまいます。対処方法としてはどっちもどっち。しかし、仕組み上どうしようもないことに気がつきました。クリック時にダブルクリックかどうかは予測できませんからねぇ。

もっとよい方法はないものか考えてみたものの、よい解決案は見つかりませんでした。ということで、こんな設計するなよ!って事にしておこう。

0 件のコメント: