0

いくつかの検索機能を備えたユーザー コントロールがあり、グリッドを含むコントロールもあります。グリッドを持つコントロールには、検索コントロールからレポートを作成するために必要ないくつかの項目を取得するためのすべての機能があります。

私の質問は、これについて読んだことがありますが、それを機能させる方法が完全にはわかりません。コントロール B の関数を呼び出すイベント ハンドラーをコントロール A に登録する必要があることを読みました。

コントロール B に呼び出す必要がある関数があるとし GetAllItemsByRegistrantID(int id).ます。コントロール A からこの関数を呼び出すにはどうすればよいですか?

これに関するヘルプやガイダンスをいただければ幸いです。

よろしく

4

2 に答える 2

3

イベントを使用してそれを行う必要がある場合の例を次に示します。

最初のユーザー コントロール (検索コントロール) で、カスタム イベントを定義します。

public partial class UserControl1 : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public event EventHandler<MyCustomeEventArgs> MyCustomClickEvent;

    protected virtual void OnMyCustomClickEvent(MyCustomeEventArgs e)
    {
        if (MyCustomClickEvent != null)
            MyCustomClickEvent(this, e);

    }

    public void button1_Click(object sender, EventArgs e)
    {
        OnMyCustomClickEvent(new MyCustomeEventArgs(5));
    }

}
public class MyCustomeEventArgs : EventArgs
{
    public MyCustomeEventArgs(int searchID)
    {
        SearchID = searchID;
    }
    public int SearchID { get; set; }

}

グリッドを含むユーザー コントロールで、ハンドラーを定義します。

public void HandleCustomEvent(object sender, MyCustomeEventArgs e)
{
    GetAllItemsByRegistrantID(e.SearchID);
}

public void GetAllItemsByRegistrantID(int id)
{
    Label1.Text = id.ToString();
}

両方が住んでいるページで、それらを一緒に配線します。

protected void Page_Load(object sender, EventArgs e)
{
    UserControl1Instance.MyCustomClickEvent += UserControl2Instance.HandleCustomEvent;
}
于 2012-07-22T22:03:02.670 に答える
0

私は間違いなくこのような状況を避けようとします。この種のコードをクラスに入れ、これを 2 つのコントロール間で共有する必要があります。

于 2012-07-22T21:33:18.440 に答える