自定义button控件处理回发事件

创建类库项目buttonControl

ContractedBlock.gif ExpandedBlockStart.gif buttonControl类库项目的myButton类
 1using System;
 2using System.Web;
 3using System.Text;
 4using System.Web.UI;
 5using System.ComponentModel;
 6
 7namespace buttonControl
 8ExpandedBlockStart.gifContractedBlock.gif{
 9    // 继承Control,IPostBackEventHandler
10    public class myButton: Control,IPostBackEventHandler
11ExpandedSubBlockStart.gifContractedSubBlock.gif    {
12        protected event EventHandler Click;
13
14        protected virtual void OnClick(EventArgs e)
15ExpandedSubBlockStart.gifContractedSubBlock.gif        {
16            if (Click != null)
17ExpandedSubBlockStart.gifContractedSubBlock.gif            {
18                Click(this, e);// 调用事件代理
19            }

20        }

21
22        // 首先触发RaisePostBackEvent事件
23        public void RaisePostBackEvent(string eventArgs)
24ExpandedSubBlockStart.gifContractedSubBlock.gif        {
25            // EventArgs.Empty相当于new EventArgs(),代表没有事件数据。
26            OnClick(EventArgs.Empty);
27        }

28
29        protected override void Render(HtmlTextWriter writer)
30ExpandedSubBlockStart.gifContractedSubBlock.gif        {
31            // 为元素定义UniqueID,为了与IPostBackEventHandler服务器控件的UniqueID相对应
32            writer.Write("<input type='submit' name='" + this.UniqueID + "' value='提交'/>");
33
34            base.Render(writer);
35        }

36    }

37}

38

在Web应用程序中添加对该类库的引用,

在页面中注册

<%@ Register assembly="buttonControl" namespace="buttonControl" tagprefix="cc2" %>

引用自定义的button控件

 <cc2:myButton ID="MyButton1" runat="server" οnclick="MyButton1_Click">
  </cc2:myButton>

后台测试:

 protected void MyButton1_Click(object sender, EventArgs e)
        {
            Response.Write("这是我自定义的按钮控件的单击事件");
        }

 

 

 如果在页面上多次调用该控件,编译器就会为每个事件委托实例生成一个字段,
 如果事件很多,则一个委托一个字段的方式看起来很浪费系统资源,
可以采用EventHandlerList来优化。把类库项目buttonControl改为

ContractedBlock.gif ExpandedBlockStart.gif Code
 1using System;
 2using System.Web;
 3using System.Text;
 4using System.Web.UI;
 5using System.ComponentModel;
 6
 7namespace buttonControl
 8ExpandedBlockStart.gifContractedBlock.gif{
 9    // 继承Control,IPostBackEventHandler
10    public class myButton: Control,IPostBackEventHandler
11ExpandedSubBlockStart.gifContractedSubBlock.gif    {
12
13        // 把事件定义成私有静态属性
14        public static readonly object ClickKey = new object();
15
16        // 将事件定义为属性,get set用add和remove代替。
17        public event EventHandler Click
18ExpandedSubBlockStart.gifContractedSubBlock.gif        {
19ExpandedSubBlockStart.gifContractedSubBlock.gif            add { Events.AddHandler(ClickKey, value); }
20ExpandedSubBlockStart.gifContractedSubBlock.gif            remove { Events.RemoveHandler(ClickKey, value); }
21        }

22
23        protected void OnClick(EventArgs e)
24ExpandedSubBlockStart.gifContractedSubBlock.gif        
25            EventHandler onclickEventDelegate = (EventHandler)Events[ClickKey];
26
27            if (onclickEventDelegate != null)
28ExpandedSubBlockStart.gifContractedSubBlock.gif            {
29                onclickEventDelegate(this, e);
30            }

31        }

32
33        public void RaisePostBackEvent(string eventArgs)
34ExpandedSubBlockStart.gifContractedSubBlock.gif        {
35            OnClick(EventArgs.Empty);
36        }

37
38        protected override void Render(HtmlTextWriter writer)
39ExpandedSubBlockStart.gifContractedSubBlock.gif        {
40            // 为元素定义UniqueID,为了与IPostBackEventHandler服务器控件的UniqueID相对应
41            writer.Write("<input type='submit' name='" + this.UniqueID + "' value='提交'/>");
42
43            base.Render(writer);
44        }

45    }

46}

47

 

转载于:https://www.cnblogs.com/_dragon/archive/2009/11/10/1599909.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Blend中创建WPF自定义Button控件,可以按照以下步骤进行: 1. 打开Blend,创建一个新的WPF项目。 2. 在“项目”面板中,右键单击“控件”文件夹,选择“添加”->“新建项”。 3. 在“添加新项”对话框中,选择“WPF”->“Custom Control”,设置名称为“CustomButton”并选择位置,点击“添加”按钮。 4. Blend会自动生成一个名为“CustomButton”的自定义控件的类文件和一个默认的控件模板文件。 5. 双击控件模板文件,进入“编辑模板”模式。在这里,你可以自由地编辑控件的外观和布局。 6. 在“对象和时间”面板中,可以选择控件的外观和行为。例如,你可以添加按钮、文本框等控件,设置它们的属性和事件处理程序。 7. 在控件模板中,找到名为“PART_Button控件的模板,这是自定义控件中的按钮。你可以编辑它的外观和行为,以实现自定义Button控件的功能和样式。 8. 在编辑完成后,保存模板文件并退出“编辑模板”模式。 9. 在CustomButton类中,添加自定义属性和事件处理程序,以实现自定义Button控件的功能。 10. 在应用程序中,使用自定义Button控件,只需要在XAML中添加一个CustomButton标记,然后设置它的属性和事件处理程序即可。 以上就是在Blend中创建WPF自定义Button控件的基本步骤。需要注意的是,在创建控件时,应该考虑控件的可重用性和灵活性,以便在不同的场景中使用。同时,应该设计好控件的外观和行为,以便用户可以方便地使用和定制控件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值