自定义控件,第二章 .Net 控件开发(WebForm) 开发自定义复合控件(3) 事件冒泡

1、 到了上节为止,已经把页面的布局都弄好了,这节主要来实现子控件属性和事件。
2、 第十五步,公开子控件属性,复合控件必须公开子控件的属性,就好像这些属性是复合控件的属性一样。由于自定义复合控件是按需要创建的,所以当属性的get和set访问器访问子控件时,并不能保证已经创建子控件。这就是为什么在两个访问器前调用EnsureChildControls方法的原因,通常在访问任何子控件之前,自定义控件必须调用EnsureChildControls方法。
public virtual string LblUserText { get { EnsureChildControls(); return Lbl_Name.Text; } set { EnsureChildControls(); Lbl_Name.Text = value; } } public virtual string BtnShowText { get { EnsureChildControls(); return Btn_Show.Text; } set { EnsureChildControls(); Btn_Show.Text = value; } }
3、 第十六步,公开子控件事件,第十五步把子控件属性公开变为自身属性,这些自身属性应用到子控件引发的事件。复合控件必须捕获子控件引发的事件,并将它们公开为自身事件。这会引发个问题,复合控件如何捕获子控件引发的事件,而去代替引发的自身事件?子控件引发的是Command事件。子控件可以通过在第一章(7)介绍过的步骤来实现事件。OnCommand方法里的RaiseBubbleEvent方法是将Test事件提升为ComTestControl复合控件的事件。
private static readonly object CommandEventKey = new object(); [Browsable(false)] public event CommandEventHandler Command { add { Events.AddHandler(CommandEventKey, value); } remove { Events.RemoveHandler(CommandEventKey, value); } } protected virtual void _disibledevent=>
4、 现在已经了解子控件冒泡将自身的事件提升为父控件的事件,现在将介绍父控件如何捕获该事件,这里我们要重写OnBubbleEvent方法,才能捕获由子控件引发的事件。还要写个方法返回文本框的值。
protected override bool _disibledevent=>
5、看下事件属性栏,有个Test事件,按照上章的,在事件里写弹出个对话框,会发现没反映,到底是哪里出了问题?在调试中会发现CommandName是空字符串。怎么会是个空呢?我们回头看下CreateContainerChildControl方法Btn_Show.CommandName还没给赋值,我们加上去。再调试看下就有了,实现了弹出对话框的效果了。
第二章 .Net 控件开发(WebForm) 开发自定义复合控件(3) 事件冒泡自定义控件
Btn_Show.CommandName = "Test";
代码下载地址:点击下载
本博客内容有些来源于网络或书籍如果侵害到你的权益,请及时联系我([email protected]) 版权归nethch和博客园所有转载请注明出处!
Tags:  vc自定义控件 qt自定义控件 自定义控件图标 自定义控件

延伸阅读

最新评论

发表评论