2012-08-08 56 views
1

從列表和樹視圖拖動具有很好的屬性,它將不會開始拖動,然後將鼠標移至最小距離 - 拖動閾值。拖動閾值由.NET窗口窗體中通過SystemInformation.DragSize提供的SM_CXDRAG和SM_CYDRAG系統度量值來控制。拖動閾值感知在Windows窗體中拖動

如果我想實現一個尊重拖拽閾值的自定義拖拽,那麼最好的方法是什麼? MSDN上的文檔似乎完全避免了這個問題,只是告訴你在MouseDown上立即調用DoDragDrop。

是否有一些事件我錯過了,可用於檢測鼠標被拖動的距離比拖動閾值還長嗎?我真的應該自己實現這個共同點嗎?

回答

1

那麼,TreeView和ListView都有ItemDrag事件來告訴你它。但這不是Control類的標準事件,這些事件是特定於該類的,並且由基礎本機Windows控件生成的專用通知觸發。分別爲TVN_BEGINDRAG和LVN_BEGINDRAG。其他一些常見的控件有它,標題,工具欄和鋼筋。消息和控件都不是「標準」的,它們稍後會在Windows 95時間範圍內添加到Windows中。微軟並沒有將它們的功能添加到舊控件中。

這就是降壓停止的地方。你需要在任何其他Control類上實現你自己的。 MouseDown和MouseMove事件並不困難。

0

實現拖拽閾值相當容易。在鼠標向下時,保存光標位置並調用DoDragDrop,然後在拖動事件中檢查鼠標當前位置與保存位置之間的距離,並且只在距離大於閾值時移動元素。

+0

這不是我要求的。我知道如何自己實現它。你的解決方案也是錯誤的。 DoDragDrop將開始拖動動畫,這在鼠標移動超過拖動閾值之前不應發生。 – poizan42 2012-08-08 12:57:57