0

onclickイベントのあるボタンがあります

<asp:Button ID="btn_Save" runat="server" Text="Save" OnClick="btn_Save_Click"/>

以下に示すように、このボタンの2番目のonclickイベントがあります。

((Button)btn).Click += new EventHandler(SaveClicked);

デバッグして、最初の問題が2番目の問題の前に発生することを確認しました。

最初のonclickから2番目のonclickをキャンセルしたい。

2つのクリックイベントが必要な理由: ボタンコントロールをパラメーターとして受け取るWebコントロール(BulkEditGridView)があり、このコントロールは行全体を保存します。2番目のクリックイベントは、テーブル全体の保存として機能します。ここで、Webコントロールにいくつかのフィールドを追加しましたが、ボタンがクリックされたときに保存されないようにします。webcontrolsイベントハンドラー(2番目のクリックイベント)を変更できないため、最初のonclickイベントを追加しました。私がやろうとしているのは、フィールドの1つ(例:テキストボックスフィールド)が空の場合にグリッドビューの保存を防ぐことです。これは、デフォルトのクリックイベントを防ぐことで実行できます。

4

3 に答える 3

2

ボタンクリックイベントから2番目のイベントハンドラーを削除するだけです。

((Button)btn).Click -= new EventHandler(SaveClicked);

しかし、2番目のイベントハンドラーが必要ないのに、なぜそれを追加するのですか?

リフレクションによってイベントハンドラーを削除することもできます。このコードを試すことはできますが、テストはされていません。

BindingFlags AllBindings = BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static;

List<FieldInfo> lst = new List<FieldInfo>();

foreach (EventInfo ei in btn.GetType().GetEvents(AllBindings))
{
    Type dt = ei.DeclaringType;
    FieldInfo fi = dt.GetField(ei.Name, AllBindings);
    if (fi != null)
        lst.Add(fi);
}

foreach (FieldInfo fi in lst)
{
    EventInfo ei = btn.GetType().GetEvent(fi.Name, AllBindings);
    if (ei != null)
    {
        object val = fi.GetValue(btn);
        Delegate mdel = (val as Delegate);
        if (mdel != null)
        {
            foreach (Delegate del in mdel.GetInvocationList())
                ei.RemoveEventHandler(btn, del);
        }
    }
}

すべてのイベントハンドラーが削除されます。詳細については、このリンクを確認してください http://www.codeproject.com/Articles/103542/Removing-Event-Handlers-using-Reflection

于 2012-08-28T11:41:01.177 に答える
0

私はあなたの質問を正しく理解したかどうかわかりません。

-=を使用して最初のメソッドを削除してから、2番目のメソッドを追加してから、最初のメソッドを再度追加します。

したがって、最初に2番目のメソッドが実行されます。

繰り返しますが、わかりません

于 2012-08-28T11:40:14.403 に答える
0

セッション変数を使用できます。

于 2012-09-13T12:41:42.943 に答える