2

シナリオ: 2 つのユーザー コントロール (foo.ascx と fum.ascx)

foo には、fum からプロパティにアクセスしたいメソッドがあります。彼らは同じページに住んでいますが、この種のコミュニケーションを達成するための非常に簡単な方法を見つけることができません.

何か案は?

4

5 に答える 5

4
  • OnMyPropertyValueChangedfum.ascxにイベントを追加します。
  • プロパティ値をプライベート変数に格納する foo.ascx に、対応する EventHandler を追加します。
  • Page_Load の fum.ascx のイベントに foo.ascx のイベント ハンドラを追加します。
  • fum.ascx Page_Load および必要に応じてイベントを発生させます。
  • foo.ascx のメソッドに独自の変数を使用させる
于 2008-10-16T22:49:20.963 に答える
1

これを処理する方法はいくつかありますが、できるだけ分離されたソリューションが最適です。

最も分離されたメソッドは、必要なコントロールを見つけて参照を返すまでコントロール オブジェクト モデルをたどる再帰的な findControl メソッドです。

private Control findControl(Control root, string id) 
{ 
    if (root.ID == id)
    { 
        return root; 
    } 

    foreach (Control c in root.Controls) 
    { 
        Control t = findControl(c, id); 
        if (t != null) 
        { 
            return t; 
        } 
    } 

    return null; 
}

これは、私がそれを使用するかどうかはわかりませんが、ちょっときちんとした別のアプローチです.(やや疑似コード):

public FunkyUserControl : UserControl
{
    private List<UserControl> subscribedControls;

    public List<UserControl> Subscribers
    {
        get { return subscribedControls;}
    }

    public void SubscribeTo(UserControl control)
    {
        subscribedControls.Add(control);
    }
}

FunkyUserControl から 2 つのユーザー コントロールを継承し、メイン ページ クラスで次のことができます。

webControl1.SubscribeTo(webControl2);
webControl2.SubscribeTo(webControl1);

これで、各コントロールはサブスクライバー コレクションをイントロスペクトして、他のコントロールを見つけることができます。

于 2008-10-16T23:07:01.457 に答える
0

最も簡単な解決策は、fum が HttpContext.Current.Items[] に値を格納し、そこから foo が後で読み取ることができるようにすることです。

より堅牢なオプションは、ページが fum への参照を設定できるプロパティを foo に与えることです。

イベントはより手間がかかりますが、構造的に優れています。

于 2008-10-16T22:57:51.023 に答える
0

フォームに接続されている UserControl にイベントを追加します。

于 2008-10-16T22:38:56.957 に答える