首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

web自定义控件继承button控件有关问题

2012-02-08 
web自定义控件继承button控件问题C# codenamespace WCLDemo{[DefaultProperty(Text)][ToolboxData({0}

web自定义控件继承button控件问题

C# code
namespace WCLDemo{    [DefaultProperty("Text")]    [ToolboxData("<{0}:MyButton runat=server></{0}:MyButton>")]    public class MyButton : Button    {        [Bindable(true)]        [Category("Appearance")]        [DefaultValue("")]        [Localizable(true)]        public MyButton()        {            this.Text = "test";        }        protected override void OnClick(EventArgs e)        {            this.Text = "xxx";                               }

为什么没有在事件处里程序,只是重写OnClick方法就相当执行了点击事件了吗,我看Button的OnClick方法只是引发Click事件,为什么他也相当与了事件处理程序呢?
点击按钮,然后先执行OnClick方法,然后在引发Click事件,在执行事件处理程序。是这样子吗?

[解决办法]
你看到的是正确的,但是你理解的好像有点问题.
1. 所谓的事件处理程序就是委托,委托的目的实际上是观察者模式。对于button的click事件来讲,就是我(客户)关心的的click事件,如果click发生了,请通知我。

也就是
button1.click += new System.EventHandler(this.button1_Click);
如果click发生,请调用button1_Click函数。

2. 而子类override父类的OnClick不太一样,这实际上不叫事件处理函数,叫覆盖。

msdn对于Button.OnClick 的解释是:Raises the Click event of the Button control.是说在这里raise click事件,而不是处理click事件。

remark里面有note:
When overriding OnClick in a derived class, be sure to call the base class's OnClick method so that registered delegates receive the event.
如果你不覆盖Onclick函数,默认调用父类的Onclick,在这里会发出click事件。
[解决办法]
探讨
那我这样理解没错吧
点击按钮,然后先执行OnClick方法→然后引发Click事件→执行事件委托处理函数

热点排行