首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

用户控件怎么对外开放事件借口?

2011-12-29 
用户控件如何对外开放事件借口???今天下了“微软一站式示例代码库”的例子,里面讲到了一个关于“事件”的例子

用户控件如何对外开放事件借口???
今天下了“微软一站式示例代码库”的例子,里面讲到了一个关于“事件”的例子代码,自己模仿着写了一个,代码如下:
Login.ascx

C# code
using System;namespace EventDemo{        public partial class Login : System.Web.UI.UserControl    {        public event EventHandler OnDengLu;        protected void Page_Load(object sender, EventArgs e)        {        }        //public string LblUserName         //{        //    get         //    {        //        return this.lblUserName.Text;        //    }        //    set         //    {        //        this.lblUserName.Text = value;        //    }        //}        //public string TxtUserName        //{        //    get         //    {        //        return this.txtUserName.Text;        //    }        //    set         //    {        //        this.txtUserName.Text = value;        //    }        //}        //public string LblPwd         //{        //    get         //    {        //        return this.lblPwd.Text;        //    }        //    set         //    {        //        this.lblPwd.Text = value;        //    }        //}        //public string TxtPwd         //{        //    get         //    {        //        return this.txtUserName.Text;        //    }        //    set         //    {        //        this.txtUserName.Text = value;        //    }        //}        //public string BtnLogin         //{        //    get         //    {        //        return this.btnLogin.Text;        //    }        //    set         //    {        //        this.btnLogin.Text = value;        //    }        //}                protected void btnLogin_Click(object sender, EventArgs e)        {            if (OnDengLu != null)                this.OnDengLu(sender, e);                    }    }}


default.aspx引用用户控件代码如下:
VB.NET code
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="EventDemo._Default" %><%@ Register src="Login.ascx" tagname="Login" tagprefix="uc1" %><!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>                <uc1:Login ID="Login1" runat="server" /><!--引用用户控件-->            </div>    </form></body></html>


后台代码:
C# code
using System;namespace EventDemo{    public partial class _Default : System.Web.UI.Page    {        protected void Page_Load(object sender, EventArgs e)        {            Login log = LoadControl("Login.ascx") as Login;            if (log != null)            {                log.OnDengLu += new EventHandler(log_OnDengLu);                            }        }        public void log_OnDengLu(object sender, EventArgs e)         {            Response.Write("login");        }    }}


但是执行结果没有(没有打印login),后来找了很久,才发现微软调用用户控件代码例子里面用到了一个PlaceHolder控件。
我按照微软的实例代码,依次对引用用户控件的default.aspx页面的前、后台添加代码
前台:<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
后台:this.PlaceHolder1.Controls.Add(myUserControl);
出现了结果(打印出了login)。

此时有发现一个问题,页面上出现了两个login控件,一个是我“拖”进去的,一个是this.PlaceHolder1.Controls.Add(myUserControl);代码动态添加的。。。


问题是,如果我动态添加用户控件的话,那么我的控件自定义的属性就不能在属性面板里面找到了。。。

请问用户控件的事件调用接口该如何放出,以及该如何注册用户控件的事件。。

[解决办法]
不需要加HolderPlace,它只是一个相当于Panel的占位符

C# code
        protected void Page_Load(object sender, EventArgs e)        {            Login log = LoadControl("Login.ascx") as Login;            if (log != null)            {                //如果需要属性,可以在这里直接赋值  如log.xxx="";                log.OnDengLu += new EventHandler(log_OnDengLu);                this.form1.Controls.Add(log);//注意这句话,是将自定义控件加到页面            }        } 

热点排行