我有一個UserControl
其中包含一些內部控件。是這樣的:我如何使內部控制不包括主要控件的事件?
現在,當我在我的項目中使用它,我想每一個點我的控制提出同樣的單擊事件,如果點擊,就像其他控件。
但問題是:我的處理程序在另一個項目,處理點擊事件,當我點擊背景上的某處,而不是button1或label1。
我可以解決它通過設置內部控件的每個事件引發主控制另一個事件,但它有點奇怪。
如何讓內部控件不覆蓋主控件的事件?
我有一個UserControl
其中包含一些內部控件。是這樣的:我如何使內部控制不包括主要控件的事件?
現在,當我在我的項目中使用它,我想每一個點我的控制提出同樣的單擊事件,如果點擊,就像其他控件。
但問題是:我的處理程序在另一個項目,處理點擊事件,當我點擊背景上的某處,而不是button1或label1。
我可以解決它通過設置內部控件的每個事件引發主控制另一個事件,但它有點奇怪。
如何讓內部控件不覆蓋主控件的事件?
我建議借力UserControl
的Load事件遍歷所有子控件在您的項目和程序添加一個處理每一個的mouseMoved事件。這將足夠強大以處理添加的任何新的子控件。例如;
private void UserControl1_Load(object sender, EventArgs e)
{
foreach (Control c in Controls)
{
c.MouseMove += Control_Move;
}
}
protected void Control_Move(object sender, MouseEventArgs e)
{
// do stuff here
}
而且不要忘了你的用戶控件的MouseMove事件掛接到同一Control_Move
方法
我做了這樣的事情在Delphi中。訣竅是不添加標籤,而是添加標籤,按鈕等的子類,以調用事件上的父母事件。
子類只是覆蓋Click,Move等並調用父類。簡單,如果你有很多這樣的話,可以節省很多時間。
您能否介紹一下如何重寫一個事件? – Blazi 2013-02-26 07:27:23
class ParentUserControl:UserControl {0} {0} public override void OnMouseDown } } //你的新控件源於此............ \t類ParentClickButton:按鈕 \t { 保護覆蓋無效onmousedown事件(MouseEventArgs mevent) { ((ParentUserControl)this.Parent).OnMouseDown(mevent); base.OnMouseDown(mevent); } \t} //你新的控制增加了這些,而不是按鈕... – CharlesW 2013-02-26 15:52:20
另外,看看這個帖子的另一種方法,我以前用過:http://stackoverflow.com/questions/547172/pass-through- mouse-events-to-parent-control – CharlesW 2013-02-26 15:52:40
它有點奇怪,你會怎麼觸發按鈕點擊?爲什麼你需要一個按鈕? – 2013-02-25 21:39:58
@NikolaDavidovic那麼,你可以有一個處理程序在整個UC內進行任何點擊操作,而另一個處理程序在點擊按鈕時運行。每個事件可以有多個處理程序,所以沒有什麼可以阻止它。 – Servy 2013-02-25 21:46:27
@Servy True,但我期待OP的回答,這樣他就可以澄清問題,我們可以提供更好的答案。 – 2013-02-25 21:51:58