在UserControl1中有一个自定义事件,我想在UserControl2中连接。
在UserControl1中的我已将自定义事件声明为:
public event MYDelegate SendMessage;
而我的委托定义在其他类库中:
public delegate string MYDelegate(string message);
我在我的代码中触发SendMessage,如下所示:
SendMessage(txt.Text);
请指导我如何在UserControl2中连接SendMessage()事件。我的想法是做类似下面的例子,但不知道如何在UserControl2中获取/访问UserControl1对象。
请帮帮我。
UserControl1.SendMessge+=ListnerMetod();
答案 0 :(得分:4)
你快到了。您只需将SendMessage附加到UserControl2的ListnerMetod。
正如马克·霍尔所说,在没有父母知晓的情况下,将一个事件从一个控件发送到另一个控件并不是一个好习惯。
以下是通过父页面触发事件的示例代码。
<%@ Register Src="SenderUserControl.ascx" TagName="SenderUserControl"
TagPrefix="uc1" %>
<%@ Register Src="ReceiverUserControl.ascx" TagName="ReceiverUserControl"
TagPrefix="uc2" %>
<uc1:SenderUserControl ID="SenderUserControl1" runat="server" />
<uc2:ReceiverUserControl ID="ReceiverUserControl1" runat="server" />
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
SenderUserControl1.SendMessage += m => ReceiverUserControl1.ListnerMethod(m);
}
}
public delegate void MessageHandler(string message);
public partial class SenderUserControl : System.Web.UI.UserControl
{
public event MessageHandler SendMessage;
protected void Button1_Click(object sender, EventArgs e)
{
SendMessage("test");
}
}
public partial class ReceiverUserControl : System.Web.UI.UserControl
{
public void ListnerMethod(string message)
{
}
}
答案 1 :(得分:2)
如果两个UserControl都由同一个父级托管,请将父级中的处理程序附加到您要订阅的UserControls事件,然后在处理程序的第二个UserControl中调用方法。