2012-06-26 107 views
0

我有幾個控件(標籤,自定義文本框,Datagridview)停靠在窗體上。當我試圖將MouseMove事件綁定到單獨的控件時,事件觸發完全正常,但是當我試圖在表單本身上掛鉤事件時,mousemove事件根本沒有響應。這可能是什麼原因?C#窗體不捕捉任何鼠標事件

編輯:

這裏是resources.cs

this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.LogicSimulationViewerForm_MouseMove); 

這裏的事件掛鉤上捕捉事件處理

private void LogicSimulationViewerForm_MouseMove(object sender, MouseEventArgs e) 
     { 
      //DOESN'T WORK!!! 
     } 
+0

它只火災時,單擊窗體本身,而不是它的內容。 – nXu

+0

我說的是mousemove不是mousedown – l46kok

+0

你應該創建**最小的**示例代碼,它不起作用並用它更新你的問題。沒有人能夠在沒有源代碼的情況下幫助你。 – torvin

回答

2

這種情況的原因是,在WindowsFormsWPF差異的事件是「 (由WPF控制),該事件將被推送給父視圖,直到視覺樹,或者相反方向:從父母到小孩。

因此,要捕獲該事件,您需要在應用程序級別上處理它,並且不要訂閱單個控件事件。

如需更詳細的例子,如何處理它可以看看這裏:

How do I capture the mouse mouse move event in my winform application

+0

無論如何有規避「塊」? – l46kok

3

的WinForms事件不冒泡的功能就像在WPF或Html中一樣。因此,如果控件停靠在窗體上,窗體不會暴露它自己的任何表面,也不會捕獲任何鼠標事件。然而,「在水之下」,所有的窗口消息(鼠標移動是一個Windows消息),通過窗體,所以有可能捕獲該消息。

編輯 狄格蘭有linked一個很好的例子,對於使用使創建另一個例子有點畫蛇添足:) IMessageFilter的

+1

那我該如何處理消息呢? – l46kok