求教高手:c# 怎样用代码方式用户控件内的事件
例如,用户控件Add.ascx-->UI_Add有一按钮<%@ControlLanguage="C#"AutoEventWireup="true"CodeFile="Ad...
例如,用户控件 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" />
怎样通过代码方式(Default.aspx.cs)改变 this.Add1.Add 的事件(A_Click 或者 B_Click)
protected void A_Click(object sender, EventArgs e)
{
Msg.Text = "功能A";
}
protected void B_Click(object sender, EventArgs e)
{
Msg.Text = "功能B";
}
不使用
<uc1:Add ID="Add1" runat="server" OnAdd="A_Click" />
我代码写成这样,但不起作用
this.Add1.Add += new UI_Add.userEvent(Add1_1);
void Add1_1(object sender, EventArgs arg)
{
Msg.Text = "功能A";
}
----------->
我想做的是:根据Default.aspx相关事件及结果的判断,使得用户控件(这里实际是调用到当前页面一个”对话框“,用于执行Default.aspx中特定的用户方法或者函数,也就是多功能按钮) 执行不同操作
谢谢诸位啦~~
老大,还是不对啊
A_Click() 和 B_Click()都是需要写在 Default.aspx这样要调用这个用户控件的页面(这里称为父级页面)内的。写到Add.ascx不方便使用,因为A_Click()或者B_Click()都保不准会调用父级页面的文本框或者其他什么的
... ...
----------------> 展开
<%@ 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" />
怎样通过代码方式(Default.aspx.cs)改变 this.Add1.Add 的事件(A_Click 或者 B_Click)
protected void A_Click(object sender, EventArgs e)
{
Msg.Text = "功能A";
}
protected void B_Click(object sender, EventArgs e)
{
Msg.Text = "功能B";
}
不使用
<uc1:Add ID="Add1" runat="server" OnAdd="A_Click" />
我代码写成这样,但不起作用
this.Add1.Add += new UI_Add.userEvent(Add1_1);
void Add1_1(object sender, EventArgs arg)
{
Msg.Text = "功能A";
}
----------->
我想做的是:根据Default.aspx相关事件及结果的判断,使得用户控件(这里实际是调用到当前页面一个”对话框“,用于执行Default.aspx中特定的用户方法或者函数,也就是多功能按钮) 执行不同操作
谢谢诸位啦~~
老大,还是不对啊
A_Click() 和 B_Click()都是需要写在 Default.aspx这样要调用这个用户控件的页面(这里称为父级页面)内的。写到Add.ascx不方便使用,因为A_Click()或者B_Click()都保不准会调用父级页面的文本框或者其他什么的
... ...
----------------> 展开
2个回答
展开全部
为什么一定要用委托事件,换下思考的方法,首先在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;
}
}
private void A_Click()
{
//功能1
}
private void B_Click()
{
//功能2
}
这时可以通过改变OnAdd的值来选择要执行的事件
<uc1:Add ID="Add1" runat="server" OnAdd="A_Click" />
创建一个属性
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;
}
}
private void A_Click()
{
//功能1
}
private void B_Click()
{
//功能2
}
这时可以通过改变OnAdd的值来选择要执行的事件
<uc1:Add ID="Add1" runat="server" OnAdd="A_Click" />
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是因为你的委托UI_Add.userEvent指向的函数Add1_1 是private的
所以委托不能回调这个函数
你这样做有点奇怪,
你是想关联用户控件里面的button单击事件吗?
那不用在里面再定义一个事件了,
因为button的Click事件是一个多播事件,
所以你可以直接把你的处理函数继续挂接到button的Click事件上,
但由于ButAdd是在用户控件里定义的一个保护成员,你在外面访问不到,所以你可以再定义一个属性,把它暴露出来,就可以往它的事件上挂函数了。
先试试看上面说的,可以吗
所以委托不能回调这个函数
你这样做有点奇怪,
你是想关联用户控件里面的button单击事件吗?
那不用在里面再定义一个事件了,
因为button的Click事件是一个多播事件,
所以你可以直接把你的处理函数继续挂接到button的Click事件上,
但由于ButAdd是在用户控件里定义的一个保护成员,你在外面访问不到,所以你可以再定义一个属性,把它暴露出来,就可以往它的事件上挂函数了。
先试试看上面说的,可以吗
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询