2014-12-25 152 views
0

我需要檢測所有鼠標單擊從其中有許多用戶控件的Windows窗體應用程序。我可以捕獲每個控件的點擊事件,並將其傳遞給主窗體,但這不會成爲現實,因爲窗體有許多自定義用戶控件(超過一百個),其中一些已經使用此事件。我試圖添加點擊,鼠標點擊,鼠標向上和向下的事件,但是如果您單擊用戶控件而不是表單的空白部分,則無法啓動它們。我搜索了網絡可能的解決方案,但沒有什麼令人滿意的。如何點擊窗體點擊事件,即使點擊用戶控件在c#

是否有一種實際的方法來使表單點擊事件甚至點擊用戶控件?我也很樂意提供任何建議來記錄用戶鼠標點擊而不使用表單點擊事件。

+0

可能重複的[如何爲表單設置單擊事件?](http://stackoverflow.com/questions/180452/how-do-i-set-a-click-event-for -a-form) –

+0

我在發佈之前已經檢查了該線程,但是我找不到實際的解決方案。以下處理窗口消息看起來很有希望。我測試後會回覆。 – TBKAY

回答

0
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")] 
    protected override void WndProc(ref Message m) 
    { 
     // 0x210 is WM_PARENTNOTIFY 
     // 513 is WM_LBUTTONCLICK 
     if (m.Msg == 0x210 && m.WParam.ToInt32() == 513) 
     { 
      // get the clicked position 
      var x = (int)(m.LParam.ToInt32() & 0xFFFF); 
      var y = (int)(m.LParam.ToInt32() >> 16); 

      // get the clicked control 
      var childControl = this.GetChildAtPoint(new Point(x, y)); 

      // call onClick (which fires Click event) 
      OnClick(EventArgs.Empty) 

      // do something else... 
     } 
     base.WndProc(ref m); 
    } 
+0

謝謝你的解答codemonkey,這是我在這個話題上看起來最實用的解決方案。我也在考慮直接處理Windows消息,但我不知道該怎麼做。感謝您的幫助。 – TBKAY