1

フォームでのイベントの設定に問題があります。セットアップは次のとおりです。

エンドユーザーが入力するフォームの 2 つの異なるバージョン (標準と高度) の 2 つのコントロールを持つページが与えられました。2 つのフォームはコードと JavaScript が異なるため、元の開発者はそれらを別々の Web ユーザー コントロールに配置しました。コントロールとは別に、Advanced モードに切り替える LinkBut​​ton があります。

<uc1:Standard runat="server" ID="StandardForm" />
<uc1:Advanced runat="server" ID="AdvancedForm" />
<asp:LinkButton runat="server" ID="lnkAdvanced" Text="Go To Advanced" OnClick="lnkAdvanced_Click" />

lnkAdvanced_Click は、現在入力されているすべての情報を詳細に取得し、Visible を反転します。

私の問題は、ボスの 1 人が標準フォーム内に「Go to Advanced」ボタンを望んでいるのに、.Visible コードがページ上にあることです。なので、イベントを使えばできると思ったのですが、うまくいかないようです。

私はこのようなイベントを設定しようとしました:

public event EventHandler AdvanceClick;

protected void lnkAdvanced_Click(object sender, EventArgs e) {
    AdvanceClick(sender, e);
}

それがうまくいかなかったとき、私はデリゲートを設定しようとしました:

public delegate void AdvancedEventHandler(object sender, EventArgs e);
public event AdvancedEventHandler AdvanceClick;

ボタンを標準フォームに移動したとき、次のように入力できると期待していました。

StandardForm.AdvanceClick += new AdvancedEventHandler(GoToAdvanced);

しかし、コントロール内のイベントを認識していないようです! エラーが表示されます:「Standard には 'AdvanceClick' の定義が含まれておらず、タイプ 'Standard' の最初の引数を受け入れる拡張メソッド 'AdvanceClick が見つかりませんでした」仕方?

4

3 に答える 3

1
// in your Standard user control
public event EventHandler AdvancedClick;

private void lbtnAdvanced_Click(object sender, EventArgs e)
{
    OnAdvancedClick(e);
}

protected void OnAdvancedClick(EventArgs e)
{
    if (AdvancedClick != null)
        AdvancedClick(this, e);
}

// on your page
StandardForm.AdvancedClick += new EventHandler(StandardForm_AdvancedClick);

private void StandardForm_AdvancedClick(object sender, EventArgs e)
{
    // toggle logic here
}
于 2009-02-22T07:13:12.213 に答える
0

標準イベントを作成したので、デリゲートは必要ありません。

フォームの読み込みなどで試してください:

StandardForm.AdvanceClick += new EventHandler(GoToAdvanced);

次に、2 つのユーザー コントロールをホストするページのどこか

protected void GoToAdvanced(object sender, EventArgs e)
{
    //Code that was previously in lnkAdvanced_Click on page.
}

編集:

セットアップが間違っているように聞こえます。

ホスト ページのマークアップを投稿できますか (この時点では、単に 2 つのユーザー コントロールであると想定しています)。

次に、AdvanceClick イベントが標準 UC で宣言されていると想定していますが、エラー メッセージは宣言されていないことを示しており、lnkAdvanced_Click メソッドは標準 UC にありますか?

次に、カスタム イベントにアタッチしようとしているコードがホスト ページで宣言されていると仮定します。

仮定を確認または否定できれば、これを解決できると確信しています。

于 2009-02-22T07:06:43.853 に答える
0

標準フォームに「高度に切り替える」ボタンがある場合。次に、明らかに、高度なフォームについて知る必要があるため、それらはかなり緊密に結合されているようです。この場合、高度なフォームを標準フォームの子として使用することもできます... または、それらを 1 つのコントロールにマージすることをお勧めします。

これらのオプションが気に入らない場合は、ボタンと 2 つのフォームをホストする 3 番目のコントロールを、それらの間でデータを移動して表示を切り替えるロジックと共に作成することをお勧めします。

個人的にはシングルコントロールオプションをお勧めします。コントロールが密結合していると、通常、後で混乱が生じるだけです。さまざまな方法で依存関係を緩めることができますが、そうする前によく考えてください。

私が現在取り組んでいる従来のプロジェクトでは、検索フォームや検索結果が複数のコントロールに分割されているなどの例がたくさんありますが、最終的には他のインスタンスが適切に機能する必要があります。前述したように、このパスはお勧めしません。

于 2009-02-22T07:44:34.900 に答える