2012-06-14 69 views
3

我有一個用戶控件,託管另一個控件,如面板,圖表控件。如何檢查鼠標單擊是否處於用戶控制而不處理子控件事件?

現在我已經實現在頂部面板控件的MouseClick事件捕獲鼠標事件,但我需要捕捉鼠標點擊或mouseDown事件對整個用戶控制區域。

pnlHeader.MouseUp += new MouseEventHandler(pnlHeader_MouseUp); //it is working 

//Not able to capture because child control coverup all area of the usercontrol. 
this.MouseDown += new MouseEventHandler(MyCustomControl_MouseDown); 

Capture mouseclick event

我通過這個SO thread去了,但它並不能幫助我就點擊鼠標或鼠標按下事件。

那麼,什麼是捕獲用戶控制鼠標事件正確和有效的方式?

任何意見或建議具有一定的參考碼(如果可能的話)將被接受。

在此先感謝。

回答

0
namespace WindowsFormsApplication1 
{ 
    public partial class UserControl1 : UserControl 
    { 
     public UserControl1() 
     { 
      InitializeComponent(); 
      this.OnUCMouseUp += new MouseEventHandler(UserControl1_OnUCMouseUp); 
      panel1.MouseUp += new MouseEventHandler(panel1_MouseUp); 
     } 

     void UserControl1_OnUCMouseUp(object sender, MouseEventArgs e) 
     { 
      MessageBox.Show("From userControl"); 
     } 

     void panel1_MouseUp(object sender, MouseEventArgs e) 
     { 
      InvokeMouseUp(this, e); 
     } 
     public event MouseEventHandler OnUCMouseUp; 
     protected void InvokeMouseUp(object sender, MouseEventArgs e) 
     { 
      if (this.OnUCMouseUp != null) 
       this.OnUCMouseUp(sender, e); 
     } 
    } 
} 
+0

它與下面的答案不同嗎? –

+0

我沒見過。剛剛嘗試併發布了 –

+0

以及不錯的工作,但它不是期望的實現方式。以這種方式添加大量代碼行 –

1

有一種方法來寫這個沒有太多的代碼。你可以在隱藏現有的處理程序,並直接內鉤上你的用戶控件的每個控制用戶控件創建自己的MouseDown事件處理程序。例如,這裏是一個爲用戶控件鼠標按下處理程序包含PanelListBox

// MouseDown event handler within UserControl 
public new event MouseEventHandler MouseDown 
{ 
    add 
    { 
     panel1.MouseDown += value; 
     listBox1.MouseDown += value; 
    } 
    remove 
    { 
     panel1.MouseDown -= value; 
     listBox1.MouseDown -= value; 
    } 
} 

如果你對你的用戶控件更多的控制,你只需將它們添加到每個部分。

你在你父母的WinForm的呼叫必須掛鉤MouseDown事件爲您的用戶控件這樣的:

myUserControl1.MouseDown += myUserControl1_MouseDown; 
相關問題