ASP.NET用户控件事件的定义和实践-- 自定义事件数据类

原创 2007年09月18日 13:33:00
 事件功能是由三个互相联系的元素提供的:提供事件数据的类、事件委托和引发事件的类。.NET Framework 具有命名与事件相关的类和方法的约定。如果想要您的类引发一个名为 EventName 的事件,您需要以下元素。
  • 持有事件数据的类,名为 EventNameEventArgs。该类必须从 System.EventArgs 导出。
  • 事件的委托,名为 EventNameEventHandler。
  • 引发事件的类。该类必须提供:
    1. 事件声明。 public event EventNameEventHandler EventName;

       

    2. 事件的方法,名为 OnEventName

   下面 分别用一个winform控件和webform控件的实现来分别说明。

  界面:

        private System.Windows.Forms.Button btnSubmit;
        private System.Windows.Forms.Button btnCancle;
        private System.Windows.Forms.TextBox UsrID;
        private System.Windows.Forms.TextBox UsrName;
        private System.Windows.Forms.TextBox UsrPwd;
        private System.Windows.Forms.TextBox Valid;

控件:UserControl1.cs

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;

namespace wFromControls
{
    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }

        public event UserLoginEventHandler SubmitLogin;
        public event CancelEventHandler Cancel;

        protected virtual void OnSubmitLogin(EventLogonArgs e)
        {
            if (this.SubmitLogin != null)
            {
                SubmitLogin(this, e);
            }

        }
        protected virtual void OnCancel(EventArgs e)
        {
            if (this.Cancel != null)
            {
                Cancel(this, e);
            }
        }


        private void btnOK_Click(object sender, System.EventArgs e)
        {
        if(this.UsrID.Text != "" && this.UsrName.Text !="" && this.UsrPwd.Text !="")
        {
        //     intLoginTime++;
            OnSubmitLogin(new EventLogonArgs(UsrID.Text, UsrName.Text, UsrPwd.Text));
        //     bLogin = TestUserInDB(new EventLogonArgs(txtID.Text,txtName.Text,txtPWD.Text));
        //MessageBox.Show("this is the btnOK_click function!","In control",MessageBoxButtons.OK);
        //if(!bLogin)
        //MessageBox.Show("Login in Failed!","Login Error",MessageBoxButtons.OK);
        }
        else
        {
        MessageBox.Show("Your must input all the items!","Login Info",MessageBoxButtons.OK);
        }
        }

        private void btnCancel_Click(object sender,System.EventArgs e)
        {
            OnCancel(e);
        }
    }

    public class EventLogonArgs : System.EventArgs
    {
        private string UsrID;
        private string UsrName;
        private string UsrPwd;
        private bool IsValid;

        public EventLogonArgs(string UsrID,string UsrName,string UsrPwd)
        {
            this.UsrID = UsrID;
            this.UsrName = UsrName;
            this.UsrPwd = UsrPwd;
        }


    }
    public delegate void UserLoginEventHandler(object sender, EventLogonArgs e);
    public delegate void CancelEventHandler(object sender,EventArgs e);


   Tset form

   private void userControl11_SubmitLogin(object sender, wFromControls.EventLogonArgs e)
        {
            MessageBox.Show("AAAAAA");
        }

        private void userControl11_Cancel(object sender, EventArgs e)
        {
            MessageBox.Show("BBBBB");
        }

下面是web下面的控件:(改掉相应的类和注册方法就行了)

loginControl.ascx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace stoneControls
{
    public partial class loginControl : System.Web.UI.UserControl
    {
        public event UserLoginEventHandler SubmitLogin;
        public event CancelEventHandler Cancel;

        protected virtual void OnSubmitLogin(EventLogonArgs e)
        {
            if (this.SubmitLogin != null)
            {
                SubmitLogin(this, e);
            }

        }

        protected virtual void OnCancel(EventArgs e)
        {
            if (this.Cancel != null)
            {
                Cancel(this, e);
            }
        }


        private void submit_Click(object sender, System.EventArgs e)
        {
        if(this.UsrID.Text != "" && this.UsrName.Text !="" && this.UsrPwd.Text !="")
        {
        //     intLoginTime++;
            OnSubmitLogin(new EventLogonArgs(UsrID.Text, UsrName.Text, UsrPwd.Text));
            //string strJS="<script language='javascript'>";
            //strJS+="alert('OK!');";
            //strJS+="</script>";
            //Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"22",strJS,true);
        //     bLogin = TestUserInDB(new EventLogonArgs(txtID.Text,txtName.Text,txtPWD.Text));
        //MessageBox.Show("this is the btnOK_click function!","In control",MessageBoxButtons.OK);
        //if(!bLogin)
        //MessageBox.Show("Login in Failed!","Login Error",MessageBoxButtons.OK);
        }
        else
        {
            //string strJS="<script language='javascript'>";
            //strJS+="alert('Your must input all the items!');";
            //strJS+="</script>";
            //Page.ClientScript.RegisterClientScriptBlock(this.GetType(),"22",strJS,true);
            //.......
        }
        }

        private void cancle_Click(object sender, System.EventArgs e)
        {
            OnCancel(e);
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            this.submit.Click+=new EventHandler(submit_Click);
            this.cancle.Click+=new EventHandler(cancle_Click);
        }
    }

    public class EventLogonArgs : System.EventArgs
    {
        private string UsrID;
        private string UsrName;
        private string UsrPwd;
        private bool IsValid;

        public EventLogonArgs(string UsrID,string UsrName,string UsrPwd)
        {
            this.UsrID = UsrID;
            this.UsrName = UsrName;
            this.UsrPwd = UsrPwd;
        }


    }
    public delegate void UserLoginEventHandler(object sender, EventLogonArgs e);
    public delegate void CancelEventHandler(object sender,EventArgs e);

}

loginControl.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="loginControl.ascx.cs" Inherits="stoneControls.loginControl" %>

<table id="TestControl">
<tr>
<td><asp:TextBox ID="UsrName" runat="Server"></asp:TextBox></td>
<td><asp:TextBox ID="UsrID" runat="Server"></asp:TextBox></td>
</tr>
<tr>
<td><asp:TextBox ID="UsrPwd" runat="Server"></asp:TextBox></td>
<td><asp:TextBox ID="TextBox2" runat="Server"></asp:TextBox></td>
</tr>
<tr><td align="Center" colspan="2">
   <asp:Button ID="submit" Text="提交" runat="server" />
   <asp:Button ID="cancle" Text="取消" runat="server" /></td>
</tr>
</table>

 引用页面:buutonListTest .aspx.cs

 using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace stoneControls
{
    public partial class buutonListTest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            this.LoginControl1.SubmitLogin+=new UserLoginEventHandler(LoginControl1_SubmitLogin);
            this.LoginControl1.Cancel+=new CancelEventHandler(LoginControl1_Cancel);
        }

        protected void LoginControl1_SubmitLogin(object sender, EventLogonArgs e)
        {
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "00", "alert('OK');", true);
        }
        protected void LoginControl1_Cancel(object sender, EventArgs e)
        {
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "11", "alert('cancle');", true);
        }
        }
}

buutonListTest .aspx

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <uc2:loginControl id="LoginControl1" runat="server">
        </uc2:loginControl></div>
    </form>
</body>
</html>

转Asp.net 用户控件添加自定义事件

转Asp.net 用户控件添加自定义事件 对于用户控件的使用有这样的特点。就是,当我们要求一个用户控件要实现特定的功能的时候,他可以在整个网站里面的页面上任意拖拽。但是,他的功能相对固定,也就是说在...

asp.net控件开发基础(3) ----------自定义控件事件处理

本次来介绍控件的事件处理. 我们知道Button控件有OnClick事件,DropDownList控件有SelectedIndexChanged事件.   一.回发事件和客户端回发   下面来看一个最...

asp.net 避免用户自定义控件的父类代码多次运行

在一个asp.net项目中,用户自定义控件是很经常使用的,一个项目中一般都会有多个用户自定义控件,而为了代码重用,通常这些控件都会继承一个父类, 一个页面还会引用多个用户自定义控件。 这种情况如果...

asp.net 类自定义事件

首选在类中做如下操作:     public class CBook     {         private string m_title;   //1,创建委托        ...
  • my98800
  • my98800
  • 2016年10月08日 12:55
  • 82

asp.net WebForm之用户自定义控件

关于用户自定义控件,想必大家已经非常熟悉了。虽然说经常用过,但是只是简单的使用而已。在这里再次总结一下Asp.net中的UserControl,以便下次使用时 能够得心应手。本文将会介绍以下内容...

asp.net用户自定义控件的方法

.ascx代码如下:

ASP.NET自定义用户控件

用户登录 用户名: ' ID="RequiredFieldValidatorTxtUserName" runat="server"...

ASP.NET分页存储过程自定义用户控件

网上有很多分页存储过程,但是基本上都是提供一个单纯的存储过程,没有具体的怎样去实现。最近做一个项目用户的数数据相当大(一百万以上 的数据),如果用.NET自带的分页基本上是跑不动了,不是提示超时就是死...
  • my98800
  • my98800
  • 2016年04月18日 08:42
  • 160
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ASP.NET用户控件事件的定义和实践-- 自定义事件数据类
举报原因:
原因补充:

(最多只允许输入30个字)