4

UserControl1 には、UserControl2 に配線したいカスタム イベントがあります。

UserControl1 では、カスタム イベントを次のように宣言しました。

 public event MYDelegate SendMessage;

私のデリゲート定義は他のクラスライブラリに次のようにあります:

public delegate string MYDelegate(string message);

以下のように、コードで SendMessage を起動しています。

  SendMessage(txt.Text);

UserControl2 で SendMessage() イベントを配線する方法を教えてください。私の考えは、以下の例のようなことをすることでしたが、UserControl2 の UserControl1 オブジェクトを取得/アクセスする方法がわかりません。

私を助けてください。

UserControl1.SendMessge+=ListnerMetod();
4

2 に答える 2

4

あなたはほとんどそこにいます。SendMessage を UserControl2 の ListnerMetod にアタッチするだけです。

Mark Hall が言ったように、親ページを知らずに 1 つのコントロールから別のコントロールにイベントを発生させるのは良い習慣ではありません。

親ページからイベントを発生させるサンプル コードを次に示します。

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

    }
}

マーク・ホールの功績

于 2013-04-30T04:41:45.430 に答える
2

両方の UserControls が同じ親によってホストされている場合は、サブスクライブする UserControls イベントに親のハンドラーをアタッチし、ハンドラーの 2 番目の UserControl でメソッドを呼び出します。

于 2013-04-30T01:32:30.787 に答える