2011-09-27 112 views
3

我需要設計一個自定義控件,該控件基本上將成爲一個奇特的按鈕,我們稱之爲CtrlButton自定義控件公開按鈕控件的OnClick事件

我想將這些放在我的空白表格上,然後轉到我的控件的事件並指定要爲執行的操作單擊事件。

如果我的自定義控制CtrlButton包含在名爲button1 1個的Windows窗體按鈕,可我只是暴露了button1底層的Click事件處理程序?

public EventHandler Click { 
    get { return button1.Click; } 
    set { button1.Click = value; } 
} 

此代碼不起作用!但是,這基本上是我想要做的。

編輯:我看到我被授予這篇文章的熱門問題,但它仍然坐在那裏-1。如果此問題可幫助您找到答案,請將其投票。

+1

派生從按鈕,而不是用戶控件。用戶控件並不意味着是可點擊的項目,它意味着成爲其他控件的包。很像Form。當你從Button派生出來的時候,你不必對Click做任何事情,你只需要繼承常規和理智的行爲。 –

+2

常見問題解答引用:*如果您對由其他可信用戶協作編輯的意見感到不舒服,則可能不是您的網站。* –

回答

3

Button.Click是一個事件,而不是一個屬性。你不能得到和設定它的價值,因爲它不是一個財產;你只能添加和刪除處理程序,因爲這是一個事件,這就是事件的工作方式。

但你可以編寫自定義addremove處理自己的事件是包裹按鈕:

public event EventHandler Click { 
    add { button1.Click += value; } 
    remove { button1.Click -= value; } 
} 
+0

這正是我原來的問題所要求的,這就是我現在正在解決這個問題。最終,我可以採取格雷戈裏A比馬爾的方法,並繼承'按鈕',但不是今天。 – jp2code

3

如果這是從標準Button控件派生,因爲這是:

using System.Drawing; 
using System.Windows.Forms; 

namespace WindowsFormsControlLibrary1 
{ 
    public class RedButton : Button 
    { 
     public RedButton() 
     { 
      base.BackColor = Color.Red; 
     } 
    } 
} 

事件是可用的。如果您已完全自定義製作您自己的按鈕,則必須連接所有事件,ala this post

+0

OK,那工作 - 但我會如何創建一個周圍有邊框的按鈕選擇時,輪流'Yellow' Red'時選擇'不是有效? (這是我的規格表的要求在這裏)目前,我有一個'Button'集中在'Panel'控件中,我可以改變'BackColor'。 – jp2code

+1

你仍然可以覆蓋本地事件,並做你想做的事情。或者,如果你感覺真的很好,你可以寫出新的。 :-)。現在,如果您需要整個面板,那麼標準的「自定義控件」模板就是您的選擇,因爲您正在合併很多控件。這樣做時,您將不得不創建事件以映射到控件事件。但是,如果這只是一個你需要的按鈕,試着從按鈕繼承,然後編碼到暴露的事件來做你想做的事情。 –