自定义用户控件回发事件

 写这个只是为了自己以后要用的时候不会忘记 有一个可以找到代码的地方

以前 写自定义控件 一般只是为了显示一些东西  所以一般只重写 Render 方法就可以

今天想研究一下自定义按钮   发现原来的功能不够了  不能触发回调方法

看了一些别人的代码  大概的明白了

 

自定义Button类

 

ContractedBlock.gifExpandedBlockStart.gif代码
 
    
using System;
using System.ComponentModel;
using System.Text;
using System.Web.UI;

namespace Test
{
[DefaultEvent(
" Click " ), DefaultProperty( " Text " ), ToolboxData( " <{0}:Button runat=server></{0}:Button> " )]
public class Button : System.Web.UI.WebControls.WebControl,IPostBackEventHandler
{
public event EventHandler Click1;
string str = " 123 " ;
public event EventHandler bs;
protected override void Render(HtmlTextWriter writer)
{
StringBuilder sb
= new System.Text.StringBuilder();
writer.Write(
" <span><a href=\ " javascript: void ( 0 );\ " style=\ " BORDER - RIGHT: # 999999 1px solid; PADDING - RIGHT: 10px; BACKGROUND - POSITION: 1px 1px; BORDER - TOP: #cccccc 1px solid; DISPLAY: inline - block; PADDING - LEFT: 10px; FONT - WEIGHT: bold; FONT - SIZE: 12px; PADDING - BOTTOM: 3px; MARGIN: 1px; BORDER - LEFT: #cccccc 1px solid; CURSOR: pointer; COLOR: # 333333 ; LINE - HEIGHT: normal; PADDING - TOP: 3px; BORDER - BOTTOM: # 999999 1px solid; BACKGROUND - REPEAT: no - repeat; FONT - FAMILY: Arial, Helvetica; WHITE - SPACE: nowrap; BACKGROUND - COLOR: #eeeeee; TEXT - DECORATION: none\ " id=\ "" + this.UniqueID + " \ "" );
sb.Append(Page.ClientScript.GetPostBackEventReference(
this , "" ) + " ; " ); // 用__doPostBack来提交,保证按钮的服务器端click事件执行
writer.WriteAttribute( " onclick " , sb.ToString());
writer.Write(
" >按钮 " + str + " </a></span> " );
}

protected override System.Collections.IDictionary GetDesignModeState()
{
return base .GetDesignModeState();
}

// Invoke delegates registered with the Click event.
protected virtual void OnClick(EventArgs e) {

if (Click1 != null )
{
Click1(
this , e);
}
if (bs != null )
{
bs(
this , e);
}
}

protected override void OnInit(EventArgs e)
{
str
= " 看看 " ;
base .OnInit(e);
}


#region IPostBackEventHandler 成员

public void RaisePostBackEvent( string eventArgument)
{
OnClick(
new EventArgs());
}

#endregion
}
}

 

 

 

.aspx页面

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register Assembly="Test" Namespace="Test" TagPrefix="t" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>   
      <t:Button runat="server" OnClick1="Button1_Click"  Onbs="Button2_Click"  />
    </div>
    </form>
</body>
</html>

 

这里主要是明白了一点  自定义控件中想要多实现一种事件 只要到类中多定义一个 event参数就行  public event EventHandler bs;

然后对应的页面上的控件事件为 On+event参数的名称

IPostBackDataHandler 接口的 LoadPostData回调方法执行的条件是一定要存在一个 name=" + this.UniqueID + " 的控件

转载于:https://www.cnblogs.com/zaspx/archive/2010/08/26/1809200.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值