快速业务通道

ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20

事件冒泡

我们上一篇已经开发一个登录的组合控件,但是我们把控件的事件的这个问题没有解决,现在我们就 来看看这个问题。

因为我们的组合控件Login是由一些已经存在的服务器控件的组合的,这样就省却了我们很多的麻烦, 上篇中我们已经把子控件的一些属性,如Text等,显示呈现为了组合控件的属性。我们将之称为“属性的 冒泡”(我自己这样认为的)。

我们现在来想下:其实我们点击“提交”按钮,我们就想把控件中信息发送给服务器,然后验证。即 ,我们点击的是“提交”按钮,但是触发的确实Login控件的验证事件。也就是说,我们应该把子控件- button的事件,上升冒泡成为Login的事件。

现在我们就正式讲讲怎么来事件冒泡。

对于事件的一些步骤,大家应该还记得:

1。定义一个数据类,用来当发生事件时,我们把一些信息携带。在本控件中,当我们点击“提交”按 钮时,我们就把用户名和密码作为数据送到服务器。所以我们的数据类包含两个信息:如下:

1 public class ValidateEventArgs:EventArgs
 2     {
 3         private string userName;
 4         private string userPassward;
 5
 6         public string UserName
 7         {
 8             get
 9             {
10                 return  userName ;
11             }
12         }
13
14         public string UserPassward
15         {
16             get
17             {
18                 return userPassward;
19             }
20         }
21
22         public ValidateEventArgs(string username, string userpassward)
23         {
24             this.userName = username;
25             this.userPassward = userpassward;
26         }
27     }

相信大家对上面的代码不陌生!!!

2.我们来定义一个委托:

1 public delegate void ValidateEventHandler(object sender,ValidateEventArgs args);

3.定义事件。

1  private static readonly object ValidateEventKey = new object();
 2         public event ValidateEventHandler ValidateUserInfoChanged
 3         {
 4             add
 5             {
 6                 Events.AddHandler(ValidateEventKey, value);
 7             }
 8             remove
 9             {
10                 Events.RemoveHandler(ValidateEventKey, value);
11             }
12         }
13
14         protected virtual void OnValidateChanged(ValidateEventArgs args)
15         {
16             ValidateEventHandler handler = Events[ValidateEventKey] as 

ValidateEventHandler;
17             if (handler != null)
18                 handler(this, args);
19         }
20

4.好了;准备都做好了,下面我们只要把这个事件冒泡成为Login的控件的就行了。其实很简单的。只 要重写一个方法就行了。

如下:

1 protected override bool OnBubbleEvent(object source, EventArgs args)
 2         {
 3             bool handled = false;
 4
 5             CommandEventArgs ce = args as CommandEventArgs;
 6             if (ce != null && ce.CommandName == "Validate")
 7             {
 8                 handled = true;
 9                 string userName = this.txtUserName.Text;
10                 string userPassward = this.txtUserPassward.Text;
11
12                 //把信息输入
13                 ValidateEventArgs ve = new ValidateEventArgs(userName, userPass

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号