1

リストビューとツリービューからドラッグすると、マウスを最小距離(ドラッグしきい値)移動する前にドラッグが開始されないという優れた特性があります。ドラッグのしきい値は、SystemInformation.DragSizeを介して.NETWindowsフォームで使用可能なSM_CXDRAGおよびSM_CYDRAGシステムメトリックによって制御されます。

ドラッグのしきい値を尊重するカスタムドラッグを実装したい場合、それを行うための最良の方法は何ですか?MSDNのドキュメントは、その質問を完全に回避しているようで、MouseDownですぐにDoDragDropを呼び出すように指示しています。

マウスがドラッグしきい値よりも長い距離ドラッグされたことを検出するために使用できる、見逃したイベントはありますか?私は本当にそのような一般的なことのためにそれを自分で実装することになっていますか?

4

2 に答える 2

1

そうですね、TreeViewとListViewの両方にItemDragイベントがあり、それについて通知します。ただし、これはControlクラスの標準イベントではありません。イベントはクラスに固有であり、基になるネイティブWindowsコントロールによって生成された専用の通知によってトリガーされます。それぞれTVN_BEGINDRAGとLVN_BEGINDRAG。他のいくつかの一般的なコントロールには、ヘッダー、ツールバー、鉄筋があります。メッセージもコントロールも「標準」ではなく、後でWindows95の時間枠の前後にWindowsに追加されました。Microsoftは、古いコントロールに機能を追加しませんでした。

だから、それはお金が止まるところです。他のControlクラスに独自に実装する必要があります。MouseDownイベントとMouseMoveイベントでは難しくありません。

于 2012-08-08T13:21:35.900 に答える
-1

ドラッグしきい値を実装するのはかなり簡単です。マウスを下に向けて、カーソルの位置を保存してDoDragDropを呼び出し、ドラッグイベントで、マウスの現在の位置と保存された位置の間の距離を確認し、距離がしきい値よりも大きい場合にのみ要素を移動します。

于 2012-08-08T12:46:47.383 に答える