给自定义控件(Web Control)添加事件的几种方法。前两种方法可以不实现IPostBackEventHandler


    写自定义控件已经好久了,也有几个用得时间比较长的,但是对于“事件”一直是比较模糊,没有很详细的理解。
    
    最近升级分页控件,由于原来使用的是VB.net(在VB.net里面添加一个事件是比较容易的),现在想改用C#,而原来的方法又写得比较笨拙,想换一个更简洁一点的方法,所以不得不重新认识一下事件。看了几遍《道不远人深入解析asp.net2.0控件开发》居然没有看懂,可能是自己太笨了吧。又找到了 自定义分页控件开发 看了几遍,还是比较迷糊,最后把《自定义分页控件开发》 里提供的代码down下来看了一下,终于有点明白了。

    先举一个简单的例子吧,我们建立一个复合控件,在CreateChildControls()里面添加两个控件,一个是Label,一个是LinkButton。我们的目的是要给自定义控件加一个事件,以便可以控制Label的Text属性。

     1、内部事件。
    这个好像是我起的名称,就是只在自定义控件的内部相应的事件,使用控件的页面不用相应相关的事件。具体一点就是要在自定义控件内部,在单击LinkButton的时候修改Label的值。   
public   class  EventTest : WebControl, INamingContainer  
    
{
protected override void CreateChildControls()
        
{
            Label lbl 
= new Label();
            lbl.ID 
= "lbl";
            
this.Controls.Add(lbl);
            
this.Controls.Add(new LiteralControl("<BR>"));
            LinkButton btn 
= new LinkButton();
            btn.ID 
= "btn";
            btn.Text 
= "复合控件的事件测试";
            
this.Controls.Add(btn);
 }

}



    编写好这段代码,然后把控件拖拽到页面里面里进行测试,运行后点击LinkButton,我们可以看到页面已经提交了,但是什么变化也没有,恩,我们还没有些事件呢。现在我们就给LinkButton加一个Click的事件。

protected   override   void  CreateChildControls()
        
{
            Label lbl 
= new Label();
            lbl.ID 
= "lbl"

            
this.Controls.Add(lbl);
            
this.Controls.Add(new LiteralControl("<BR>"));

            LinkButton btn 
= new LinkButton();
            btn.ID 
= "btn";
            btn.Text 
= "复合控件的事件测试";
            
this.Controls.Add(btn);

            
//给按钮添加内部事件            
            btn.Click += new EventHandler(btn_Click);
}


 
void  btn_Click( object  sender, EventArgs e)
        
{
            Label lbl 
= (Label)this.FindControl("lbl");
            lbl.Text 
+= "控件内部的事件,hi";
        }


    再次运行网页,单击,我们看到了想要的效果。

    怎么样简单吧,但是这种方法很不灵活,如果调用控件的网页也想相应事件怎么办呢?

     2、外部事件。
    这回我们要让自定义控件的外部也能相应事件。这个理论上我们要使用委托,也就是delegate,但是系统已经为我们定义好了一个( EventHandler),我们先用现成的。

    这样我们就给自定义控件定义了一个事件,重新编译,我们可以在控件的属性里面看到这个事件。(如果您没有看到,说明没有刷新,可能需要把IDE关闭,再次打开)。
 
public   event  EventHandler myClick
        
{
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值