在按下鼠標時是否可以檢測鼠標是否進入Control
?在按下鼠標的同時檢測MouseEnter事件
我認爲傳統的MouseEnter event
沒有觸發,如果按下鼠標,因爲與DragAndDrop
功能有一些衝突?
設置.Capture = false
是不是在這種情況下,適當的,因爲在MouseDown
的MouseMove
事件必須被捕獲/處理
在按下鼠標時是否可以檢測鼠標是否進入Control
?在按下鼠標的同時檢測MouseEnter事件
我認爲傳統的MouseEnter event
沒有觸發,如果按下鼠標,因爲與DragAndDrop
功能有一些衝突?
設置.Capture = false
是不是在這種情況下,適當的,因爲在MouseDown
的MouseMove
事件必須被捕獲/處理
嗯,是的,這在技術上是可行的。不是你應該做的事情。
重要的是當您按下鼠標按鈕時鼠標光標位於的位置。這會觸發底層控件上的MouseDown事件。但是做了其他事情,它也捕獲了鼠標。由Control.Capture屬性公開。
這很重要,它可確保MouseUp事件可靠地啓動。許多控件使用該事件觸發Click事件。像一個按鈕。副作用是按住按鈕時將鼠標移動到的控件不會看到任何鼠標消息。他們改爲點擊控制。即使您將鼠標完全移出控件。
這可以修補。例如,您可以將控件的MouseDown事件處理程序中的Capture屬性設置回false,實際上使點擊完全無效。或者您可以使用MouseMove監視鼠標位置,並在看到它移出DisplayRectangle時取消捕獲。
你可以做的事情,但你可能不應該。您使您的用戶界面與用戶熟悉的大多數其他程序的用戶界面行爲不同。或者更糟的是,它在你自己的UI中不一致,很可能發生。如此混淆用戶很少是一個好主意。它是由你決定。
* ...它確保MouseUp事件可靠地被觸發*。不。* mouseup *事件並不總是會觸發。 mouseleave和capturechanged總是被觸發。 – 2014-09-19 19:08:16
這不是不真實的,Ctrl + Escape是老闆重寫。我不認爲納入這將使答案更容易理解,雖然:)異常指出。 – 2014-09-19 19:14:27
首先我要感謝@Hans的回答。這是非常豐富和結構良好的+1!
但在我的情況下,這個答案不是一個有效的解決方案。在MouseDown
事件中設置.Capture = False
具有太多缺點。
我通過傳遞Controls
應在MouseEnter
事件的List(Of)
在Control
,這將觸發MouseDown
和MouseMove
事件作出反應解決了這個問題。
內MouseMove
處理,如果鼠標位置是內List(Of)-Controls
之一如果鼠標是這些Controls
之一的範圍內時,OnMouseEnter(ByVal e as System.EventArgs)
顯式調用檢查。
拖放具有自己的DragEnter,DragOver和DragDrop事件。但是,如果它進入時發生故障,我不認爲它會發生火災。 – Plutonix 2014-09-19 16:37:25