2011-02-02 43 views
0

Hallo,將鼠標事件傳遞給基本控件,搜索一個好的解決方案

感謝您的閱讀。我得到的答案真的幫了我,很多!

但對問題。我有UserControl作爲基類。子類在UserControl上添加其控件,讓我們先調用BaseControl和第二個ChildControl。

在BaseControl級別上,我在某些MouseEvent上附加了一些Delegates。

問題是,如果有一個子控件添加到它們,它們將不會觸發。所以我知道我可以從所有的Childrensevent中取出所有Mouseevent,並將它們穿過。但那第一個很髒,一秒不夠。因爲我想要繪製邊框或移動BaseControl。

所以我的問題是真的:有沒有辦法獲得完全訪問在基本控制的MouseEvents,如果有ChildControls添加?

謝謝你很多!

托馬斯

編輯:

這裏是片段,希望大家明白:

public partial class baseControl : UserControl 
{ 
    public baseControl() 
    { 

     InitializeComponent(); 

     //will not be called 
     this.MouseUp += delegate(object sender, MouseEventArgs e) 
     { 
      // some code 
     }; 
    } 

} 

public partial class child : baseControl 
{ 
    secretControl childControl; 
    public child() 
    { 
     InitializeComponent(); 
     this.childControl= new secretControl(); 
     this.childControl.Visible = true; 
     //... ,more 
     this.forChildUsePanel.Add(this.childControl); 


     // works fine , as it will be called 
     this.childControl.MouseUp += delegate(object sender, MouseEventArgs e) 
     { 
      // some code 
     }; 


    } 

} 

提醒:這是snipptes,所以對於理解目的,削減一些角落。

建議輸入: 我想在添加到BaseControl的每個控件上獲得一些鼠標事件。

+1

托馬斯嗨 - 請提供一個代碼示例,所以我們可以看到你正在試圖做 – 2011-02-02 09:25:41

回答

0

我相信你應該把事件處理程序附加到每個單獨的子控件而不是父控件,如果你想攔截它的孩子。

+0

是的,這是這樣的我會去的。但我感到骯髒。我的父母在孩子中沒有任何分歧。讓我們希望有一個方法 – Thomas 2011-02-02 12:50:27

0

你添加了什麼樣的控件?這可能是定製這些控件的解決方案。例如,如果添加一個Label,則創建一個新的MousePassthroughLabel,該Label繼承自Label並且其inbuild MouseEvent僅觸發其父控件的一個。爲每種類型的控件執行一次操作,並使用您自己的「MousePassthrough」控件代替原生控件。

+0

我添加像它自己的圖形,速度表和表格。一些有自己的鼠標處理程序 – Thomas 2011-02-02 12:49:09

0

有了這個新的微軟技術,Reactive Extensions,這將使得事件驅動編程更加容易。

相關問題