求教高手:c# 怎样用代码方式用户控件内的事件

来源:百度知道 编辑:UC知道 时间:2024/05/29 18:35:30
例如,用户控件 Add.ascx --> UI_Add 有一按钮
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Add.ascx.cs" Inherits="UI_Add" %>
<asp:Button ID="ButAdd" runat="server" Text="新增" OnClick="ButAdd_Click" />

在.cs 文件中通过委托添加其事件
//定义一个委托
public delegate void userEvent(object sender, EventArgs arg);
//
public event userEvent Add;

protected void ButAdd_Click(object sender, EventArgs e)
{
if (this.Add!= null)
{
this.Add(this, e);
}
}

问题是:在Default.aspx引用该用户控件后
<%@ Register src="Add.ascx" tagname="Add" tagprefix="uc1" %>
<asp:Label ID="Msg" runat="server" Text="信息"></asp:Label>
<uc1:Add ID="Add1" runat="server" />

怎样通过代码方式(Def

这是因为你的委托UI_Add.userEvent指向的函数Add1_1 是private的

所以委托不能回调这个函数

你这样做有点奇怪,

你是想关联用户控件里面的button单击事件吗?

那不用在里面再定义一个事件了,

因为button的Click事件是一个多播事件,

所以你可以直接把你的处理函数继续挂接到button的Click事件上,

但由于ButAdd是在用户控件里定义的一个保护成员,你在外面访问不到,所以你可以再定义一个属性,把它暴露出来,就可以往它的事件上挂函数了。

先试试看上面说的,可以吗

为什么一定要用委托事件,换下思考的方法,首先在Add.ascx
创建一个属性
private string _onAdd;
public string OnAdd
{
set { _onAdd = value; }
get { return _onAdd; }
}
当Add.ascx中的Button_Click()时,根据AddEvent这个属性值来选择要执行的事件
protected void ButAdd_Click(object sender, EventArgs e)
{
switch (_onAdd)
{
case "A_Click":
A_Click();
break;
case "B_Click":
B_Click();
break;