0

こんにちは、aspx ページの page-init イベントに 2 つの ascx がロードされています。コントロール 1 には、コントロール 2 のドロップダウン リストが selectedIndex の変更に応答するラジオ ボタン リストがあります。ここまでは、SelectedIndexChange ハンドラーで RaiseBubbleEvent を呼び出し、コントロール参照と commandArgs を渡しました。次に、aspx で OnBubbleEvent をオーバーライドし、コントロール参照と commandArgs を受け取ることができます。私の質問は、この情報をコントロール 2 に渡す方法です。コントロールは動的に読み込まれ、aspx の asp:PlaceHolders に追加されるため、ページはコントロールを認識しません。コントロール 2 のドロップダウンのデータソースを変更できるように、どのラジオ ボタンが選択されたかを知るためにコントロール 2 が必要です。このような例はありますか? ポインタやヒントをいただければ幸いです。

ありがとう、サンディエゴで~ck

4

3 に答える 3

0

ページがこれらのコントロールを認識していないと述べたので、最良の方法は、 Control1 クラスに I-want-to-listen-to-your-event セッター メソッドを使用してインターフェイスを公開することです。

Control2 は、その親 (ページ) を検索して、インターフェイスを実装する他の兄弟コントロールを探し、そのハンドラーへの参照を渡してセッターを呼び出す必要があります。

このようにして、コントロールを変更せずに他のページにドロップできます。

編集:

ダウンロード用のサンプル Web アプリケーションを追加しました。ソース コードはパブリック ドメインに公開されます。

于 2009-08-21T03:24:48.037 に答える
0

これが非常に良い解決策かどうかはわかりませんが、うまくいくはずです。コントロール 2 でイベントのハンドラーを作成し、そのハンドラーへのデリゲートにアクセスする何らかの方法を用意します。次に、コントロール 1 のイベントを、そのアクセサーによって返されたハンドラーに接続します。非常に大雑把な例:

コントロール 1 で:

public event SelectedIndexChanged;

public void PageLoad()
{
    radioList.SelectedIndexChanged += new EventHandler(RadSelectedIndexChanged);
}

public void RadSelectedIndexChanged(object sender, EventArgs args)
{
    SelectedIndexChanged(sender, args);
}

aspx ページ:

control1.SelectedIndexChanged += control2.GetHandler();

コントロール 2:

public EventHandler GetHandler()
{
    return new EventHandler(HandleEvent);
}

protected void HandleEvent(object sender, EventArgs args)
{

}
于 2009-08-21T02:09:38.687 に答える
0

コントロール 2 は、他のコントロールの「SelectedIndexChanged」イベントにアタッチする必要があります。何らかの理由でそれは不可能ですか?

于 2009-08-21T02:10:21.230 に答える