【问题标题】:consuming custom event of one user control in another user control?在另一个用户控件中使用一个用户控件的自定义事件?
【发布时间】:2013-04-23 20:06:40
【问题描述】:

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

在 UserControl1 中,我已将自定义事件声明为:

 public event MYDelegate SendMessage;

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

public delegate string MYDelegate(string message);

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

  SendMessage(txt.Text);

请指导我如何在 UserControl2 中连接 SendMessage() 事件。我的想法是在下面的示例中执行类似操作,但不确定如何获取/访问 UserControl2 中的 UserControl1 对象。

请帮帮我。

UserControl1.SendMessge+=ListnerMetod();

【问题讨论】:

标签: c# asp.net .net vb.net


【解决方案1】:

你快到了。您只需要将 SendMessage 附加到 UserControl2 的 ListnerMetod。

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

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

Default.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)
    {

    }
}

感谢 Mark Hall

【讨论】:

    【解决方案2】:

    如果两个 UserControl 都由同一个父级托管,请将父级中的处理程序附加到您要订阅的 UserControls 事件,然后调用处理程序中第二个 UserControl 中的方法。

    【讨论】:

    • 有没有办法直接将用户控件连接到用户控件?还是直接在母版页到用户控件或内容页到母版之间?
    • 这是 Asp.net 还是 Winforms?
    • 我主要在 Winforms 或 Wpf 中工作,你可以试试这样的方法,看看它是否有效。 userControl1.SendMessage += new UserControl1.MyDelegate(userControl2.ListenerMethod);这只是将监听器方法添加为EventHandler。确保 Method 与 Delegate 具有相同的返回类型。
    • @user2279051 我刚刚在一个 ASP.Net 项目上进行了测试,它也可以工作。
    • UserControl 了解另一个 UserControl 是不好的,我是在它们所在页面的 Page_Load 事件中做到的。您将需要使用 UserControls 的实例名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多