2011-09-27 93 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

你仍然可以覆盖本地事件,并做你想做的事情。或者,如果你感觉真的很好,你可以写出新的。 :-)。现在,如果您需要整个面板,那么标准的“自定义控件”模板就是您的选择,因为您正在合并很多控件。这样做时,您将不得不创建事件以映射到控件事件。但是,如果这只是一个你需要的按钮,试着从按钮继承,然后编码到暴露的事件来做你想做的事情。 –