在另一个用户控件中使用一个用户控件的自定义事件

本文关键字:用户 控件 一个 自定义 事件 另一个 | 更新日期: 2023-09-27 18:11:30

在UserControl1中有一个自定义事件,我想在UserControl2中连接。

在UserControl1我已经声明自定义事件为:

 public event MYDelegate SendMessage;

而我的委托定义在其他类库中,如:

public delegate string MYDelegate(string message);

我在我的代码中触发SendMessage如下:

  SendMessage(txt.Text);

请指导我如何在UserControl2中连接SendMessage()事件。我的想法是做一些像下面的例子,但不确定如何获得/访问UserControl1对象在UserControl2。

请帮帮我。

UserControl1.SendMessge+=ListnerMetod();

在另一个用户控件中使用一个用户控件的自定义事件

你就快成功了。你只需要将SendMessage附加到UserControl2的listnermethod。

正如Mark Hall所说,在父页面不知道的情况下从一个控件触发事件到另一个控件是不明智的。

下面是通过父页面触发事件的示例代码。

违约。aspx(父页面)

<%@ 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);
    }
}

SenderUserControl.ascx

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");
    }
}

ReceiverUserControl.ascx

public partial class ReceiverUserControl : System.Web.UI.UserControl
{
    public void ListnerMethod(string message)
    {
    }
}

信贷霍尔马克

如果两个UserControls都由同一个父控件承载,则在父控件中附加一个处理程序到您想订阅的UserControls事件,然后在处理程序中调用第二个UserControl中的方法