自定义用户控件回发事件

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

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

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

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

 

自定义Button类

 

代码
    
      
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 + " 的控件

你可能感兴趣的:(自定义)