9

OnMouseClick と OnMouseDoubleClick をオーバーライドし、使用されたクリック スタイルに応じて異なるアクションを実行したいと考えています。

問題は、シングル クリックとダブル クリックの両方で OnMouseClick が発生し、OnMouseDoubleClick の前に呼び出されることです。

これは一般的な要件であるに違いないと確信しているので、かなり明白な何かが欠けていると思います。誰かが私を埋めることができますか?

編集して追加: MouseEventArgs.Clicks カウントは役に立ちません。ダブルクリックの場合、最初のクリックは OnMouseClick で MouseEventArgs.Clicks == 1 のシングル クリックとして処理されます。

編集して追加: オブジェクトは画像のサムネイルです。シングルクリックで、エクスポートの選択のオンとオフを切り替える必要があります。ダブルクリックすると、サムネイルが全画面表示になります。選択と「アクティベーション」アクションは直交しています。これは、2 つのアクションの根本的な問題を示している可能性があります...

乾杯、 ロブ

4

4 に答える 4

13

これは、Windows 全体で発生します。.Netでそれを処理するために特別なものを追加したとは思わない.

これを処理する通常の手段は次のとおりです。

  • a) select のように、シングル クリックをダブル クリックの前に実行したいものにします。
  • b) それができない場合は、クリック イベントでタイマーを開始します。タイマー ティックで、シングル クリック アクションを実行します。ダブルクリック イベントが最初に発生した場合は、タイマーを強制終了し、ダブルクリック アクションを実行します。

設定する時間は、システムのダブルクリック時間 (ユーザーがコントロール パネルで指定できます) と同じにする必要があります。System.Windows.Forms.SystemInformation.DoubleClickTime から入手できます。完全な詳細は MSDN にあります。

于 2008-10-20T14:09:07.033 に答える
0

問題は、ほとんどのオブジェクトが両方を実装していないことです。シングル クリックとダブル クリックで異なるアクションを合理的に実行できる少数のオブジェクトは、通常、ダブル クリック アクションの前にシングル クリック アクションを実行しても問題ありません (フォルダを強調表示してから開く、選択する前にアドレス バーにフォーカスを入力するなど)。判断する方法は、シングル クリックを一定時間待機し、ダブル クリックが検出された場合はシングル クリックのアクションをキャンセルすることです。

于 2008-10-20T14:11:07.777 に答える
0

別の可能な解決策は、OnMouseDoubleClick 関数で OnMouseClick を呼び出すことです。OnMouseClick のアクションはバイナリ トグルであるため、2 回呼び出すと同じ状態にリセットされます。

したがって、ユーザーがダブルクリックすると、Windows は OnMouseClick を呼び出し、次に OnMouseDoubleClick を呼び出します。OnMouseDoubleClick は OnMouseClick を (再度) 呼び出して状態を復元し、ダブルクリックを処理します。

これは解決策としては不十分に感じますが、機能します。

タイマーの使用 (ダブルクリックの最初のクリックを飲み込むため) も同様に満足のいくものではなく、ユーザーのダブルクリック率の設定を処理するという複雑さが追加されます。

乾杯、 ロブ

于 2008-10-20T14:27:41.893 に答える
-1

OnMouseClick イベント ハンドラー内でタイマーを開始できます。

  • タイマーがタイムアウトした場合 (たとえば 300ms)、1 回のクリックが意図されています。

そうしないと

  • タイムアウトになる前に別の OnMouseClick イベントが生成された場合は、クリックの x&y 位置を調べることができます。最初のクリックから特定の半径内にある場合は、ダブルクリック機能を実行します。

さもないと

  • 最初のクリックを処理し、2 回目のクリックのタイマーを再初期化する

注意: この実装には、timeoput と「ダブルクリック」半径の両方をシステム構成とは無関係に構成できるという利点があり、ソフトウェアを複数のマシンにインポートできます。

于 2008-10-20T14:13:25.137 に答える