在asp.net中为Web用户控件添加属性和事件

  先来看看用户控件的前台代码(LogInOutControl.ascx文件):
<%@ Control Language="c#"
AutoEventWireup="false" Codebehind="LogInOutControl.ascx.cs"
Inherits="ZZ.LogInOutControl" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<TABLE id="Table1" style="FONT-SIZE: 9pt; WIDTH: 183px; HEIGHT: 125px" cellSpacing="1"
    cellPadding="1" width="183" align="center" border="1">
    <TR>
        <TD height="20">
            <asp:Label id="LabelUser" runat="server"> 用户:</asp:Label>
            <asp:TextBox id="TextBoxUserName" Width="128px" runat="server"></asp:TextBox></TD>
    </TR>
    <TR>
        <TD height="20"><FONTFONT-SIZE: 10pt;">宋体">
                <asp:Label id="LabelPassword" runat="server"> 密码:</asp:Label>
                <asp:TextBox id="TextBoxPassword" Width="128px" runat="server" TextMode="Password"></asp:TextBox></FONT></TD>
    </TR>
    <TR>
        <TD align="center" height="20"><FONTFONT-SIZE: 10pt;">宋体">
                <asp:Button id="ButtonLogIn" Width="50px" Text=" 登录" runat="server"></asp:Button>
                <asp:Button id="ButtonLogOut" Width="49px" Text=" 注销" runat="server"></asp:Button></FONT></TD>
    </TR>
</TABLE>
我们简单简单的放了两个Label,两个TextBox,两个Button以及一个Html表。
接下去就是为LogInOutControl.ascx.cs文件添加代码了。
首先定义一个delegate,其中 LogInOutEventArgs 类是从EventArgs类继承,
public delegate void LogInOutClickHandler(object sender,LogInOutEventArgs e);
我觉得把 这个delegate放在 LogInOutControl 类外面更为合适。
接下去为控件声明了 LogInOutClick 事件,如下:
public event LogInOutClickHandler LogInOutClick;
另外为了更好的使用属性,加了Language枚举,
private Language language;
当然外部通过public Language Lg {get;set;}属性来访问。目的就是改变或者获取当前控件的显示。
接下去就是定义控件事件触发函数OnLogInOutClick,由按钮单击事件处理函数来完成对用户控件事件的触发。
完整代码如下:
namespace ZZ
{
    using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
 
    // 定义代理
    public delegate void LogInOutClickHandler(object sender,LogInOutEventArgs e);
    public class LogInOutControl : System.Web.UI.UserControl
    {
        protected System.Web.UI.WebControls.Button ButtonLogIn;
        protected System.Web.UI.WebControls.TextBox TextBoxUserName;
        protected System.Web.UI.WebControls.TextBox TextBoxPassword;
        protected System.Web.UI.WebControls.Button ButtonLogOut;
        protected System.Web.UI.WebControls.Label LabelUser;
        protected System.Web.UI.WebControls.Label LabelPassword;
        public event LogInOutClickHandler LogInOutClick;
        private Language language;
        // 方法
        public void ChangeLanguage(Language language)
        {
            this.Lg = language;
        }
        // 属性
        public Language Lg
        {
            set
            {
                if(value!=this.language)
                {
                    if(value==Language.English)
                    {
                        this.LabelUser.Text = "User:";
                        this.LabelPassword.Text ="Password:";
                        this.ButtonLogIn.Text = "LogIn";
                        this.ButtonLogOut.Text = "LogOut";
                    }
                    else
                    {
                        this.LabelUser.Text = " 用户:";
                        this.LabelPassword.Text =" 密码:";
                        this.ButtonLogIn.Text = " 登录";
                        this.ButtonLogOut.Text = " 注销";
                    }
                }
            }
        }
        private void Page_Load(object sender, System.EventArgs e)
        {
            if(this.LabelUser.Text=="User:")
                    this.language = Language.English;
                else
                    this.language = Language.Chinese;
        }
        private void OnLogInOutClick(object sender,LogInOutEventArgs e)
        {
            if(LogInOutClick!=null)
                LogInOutClick(this,e);
        }
        #region Web 窗体设计器生成的代码
        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
private void InitializeComponent()
        {
            this.ButtonLogIn.Click += new System.EventHandler(this.ButtonLogIn_Click);
            this.ButtonLogOut.Click += new System.EventHandler(this.ButtonLogOut_Click);
            this.Load += new System.EventHandler(this.Page_Load);
        }
        #endregion
        private void ButtonLogIn_Click(object sender, System.EventArgs e)
        {
            OnLogInOutClick(this,new LogInOutEventArgs(LogInClickType.LongIn,CustomValidate(this.TextBoxUserName.Text,this.TextBoxPassword.Text)));
        }
        private void ButtonLogOut_Click(object sender, System.EventArgs e)
        {
            // 注销代码省略
            OnLogInOutClick(this,new LogInOutEventArgs(LogInClickType.LongOut,true));
        }
        // 验证函数
        private bool CustomValidate(string userName,string password)
        {
            // 验证代码省略,假设通过
            return true;
        }
    }
}
另外一个文件定义了枚举和参数类:
using System;
namespace ZZ
{
    public class LogInOutEventArgs : EventArgs
    {
        private LogInClickType type;
        private bool result;
       
        public LogInOutEventArgs(LogInClickType type,bool result):base()
        {
            this.type = type;
            this.result = result;
        }
        public LogInClickType Type
        {
            get{return this.type;}
        }
        // 操作结果,
        public bool Result
        {
            get{return this.result;}
        }
    }
    // 操作类型
    public enum LogInClickType : int
    {
        LongIn,
        LongOut
    }
    // 定义语言
    public enum Language
    {
        Chinese,
        English
    }
}
接下去看看在aspx页面里面使用。
新建一个Default.aspx页面,拖一个 LogInOutControl 用户控件到上面。
<%@ Register TagPrefix="uc1" TagName="LogInOutControl" Src="LogInOutControl.ascx" %>
<%@ Page language="c#" Codebehind="Default.aspx.cs" AutoEventWireup="false" Inherits="ZZ.Default" %>
<%@ Import Namespace="ZZ" %>
<HTML>
    <HEAD>
        <title>WebForm1</title>
    </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
            <FONTFONT-SIZE: 10pt;">宋体">
                <uc1:LogInOutControl id="LogInOutControl1" runat="server">
                </uc1:LogInOutControl>
                <asp:Label id="LabelMsg" runat="server"></asp:Label>
                <asp:DropDownList id="DropDownList1" runat="server" AutoPostBack="True">
                    <asp:ListItem Value="0" Selected="True"> 中文</asp:ListItem>
                    <asp:ListItem Value="1"> 英文</asp:ListItem>
                </asp:DropDownList></FONT>
        </form>
    </body>
</HTML>
在后台代码中添加事件和属性。
虽然在前台添加了 LogInOutControl1 ,但是后台代码中不会生成 protected LogInOutControl LogInOutControl1; 这条语句,我觉得很奇怪,不管先加上他。
接着在Page_Load事件中注册LogInOutClick事件:
this .LogInOutControl1.LogInOutClick += new LogInOutClickHandler(LogInOutControl1_LogInOutClick);
 
完整代码如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
 
namespace ZZ
{
    public class Default : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Label LabelMsg;
        protected System.Web.UI.WebControls.DropDownList DropDownList1;
        protected LogInOutControl LogInOutControl1;
        private void Page_Load(object sender, System.EventArgs e)
        {
            // 注册用户控件事件
            this.LogInOutControl1.LogInOutClick += new LogInOutClickHandler(LogInOutControl1_LogInOutClick);
        }
        #region Web 窗体设计器生成的代码
        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
        private void InitializeComponent()
        {   
            this.DropDownList1.SelectedIndexChanged += new System.EventHandler(this.DropDownList1_SelectedIndexChanged);
            this.Load += new System.EventHandler(this.Page_Load);
        }
        #endregion
        private void LogInOutControl1_LogInOutClick(object sender, LogInOutEventArgs e)
        {
            switch(e.Type)
            {
                case LogInClickType.LongIn:
                    this.LabelMsg.Text = " 你点击了登录按钮,操作结果:"+e.Result.ToString();
                    break;
                case LogInClickType.LongOut:
                    this.LabelMsg.Text = " 你点击了注销按钮,操作结果:"+e.Result.ToString();
                    break;
            }
        }
private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            this.LogInOutControl1.Lg = (Language)this.DropDownList1.SelectedIndex;
            //this.LogInOutControl1.ChangeLanguage((Language)this.DropDownList1.SelectedIndex);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值