2011-08-15 7 views
0

ラジオボタンチェックイベントで実行する関数がありますが、一度だけ実行する必要があります。後続のラジオボタンチェックイベントでは、私の関数を呼び出さないでください。一度実行した後に関数を削除する方法

void rb_CheckedChanged(x, y) 
{ 
    LoadSomeData(); //need to load only once. 
    // rest of the code; to be executed every single time.. 
} 

注:

  1. 私はLoadSomeData()だけのラジオボタンイベントの下で実行することにしたいです。

  2. 私は整数メンバ変数を設定でき、++、n = 1などをチェックします。ブール値フラグ。それは私が探しているものではありません。

おかげ..

答えて

1

はあなたに興味があるメソッドを呼び出すと、そのメソッドを削除リフレクションを使用して、あなたが、あなたのイベントに呼んで、リストからメソッド名を取得したい関数名のリストを作成しています

List<string> listMethod = new List<string>(); 
listMethod.Add("LoadSomeData"); 

その後、

void rb_CheckedChanged(x, y) 
{ 
string methodName = listMethod[0]; 
Type.InvokeMember(
        methodName, 
        BindingFlags.InvokeMethod | BindingFlags.Public | 
         BindingFlags.Static, 
        null, 
        null, 
        null); 
listMethod.Clear(); //or remove what ever you want 
} 
:ようなもの...それはリストに表示されなくなります前に、メソッドが実行されません、イベントが再び呼び出されたときに、...リストから次の時間に名前を付けます

あなたはから動的メソッド呼び出しに関する情報を取得することができます:あなたが持つ属性を作成することができhttp://www.codeproject.com/KB/cs/CallMethodNameInString.aspx

+0

イベントハンドラのように関数を削除する方法はありますか? – nawfal

+0

イベントハンドラ(+ =)を追加してイベントハンドラを削除する場合は、 – Waqas

+0

ありがとうございました...... – nawfal

1

あなたはhidden fieldを設定し、再びLoadSomeDataを実行すべきかどうかを判断するためのフラグとしてことを使用することができます。

void rb_CheckedChanged(x, y) 
{ 
    if (hiddenField.Value == "False") 
    { 
     LoadSomeData(); //need to load only once. 
     hiddenField.Value = true.ToString(); 
    } 
    else 
    { 
     // Do nothing. 
    } 
    // rest of the code; to be executed every single time.. 
} 

そして、あなたのページに:何かのように

<asp:HiddenField ID="hiddenField" Value="False" /> 
+0

ヘルをlo、この隠されたフィールドは何ですか?どのようなタイプですか? – nawfal

+0

OK ''について何も言及していません。私はそれのために行くwouldnt。私はイベントハンドラーを取り除く方法のようなものを考えていました。関数でそれを行うことはできますか? – nawfal

+0

私は 'HiddenField'クラスに対する私の答えへのリンクを追加しました。そこにも例があります。 –

1

私は、オプション2は、あなたの最良の選択だと思うその周りに粘着性のブール値を持っています。あなたは何ができるか

private bool stickyFlag = true; 

void rb_CheckedChanged(x,y) 
{ 
    if (true == stickyFlag) 
    { 
     LoadSomeData(); 
     stickyFlag = false; 
    } 
    .... 
    // rest of the code; to be executed every single time.. 
} 
+0

私は言ったこれは私が探しているものではないという疑問です。 – nawfal

+0

@nawfla:私は知っている限り、これを行う唯一の方法だと私は信じています。 – NirMH

+0

@nawfal:あなたは何を探していますか?マジック ?フレームワークや言語の中で何をしようとしているのかについての規定はないので、他に何が欲しいのですか?フラグを使うことは、あなたが何をしているのかを達成する最も簡単な方法です。それ以外のものは、研究して試してみると楽しいものに過ぎません。これはあなたの後のことですか? –

1

をPostSharp [RunOnceを]

方法がすでにトリガされた天気を示すプロパティを有することができる。このattribut

PostSharp Link

1

私は2番目のオプションのために行くだろうが、あなたは、デリゲートを使用できます。

public event Action doLoadSomeData; 

void onLoad(sender, args) 
{ 
    doLoadSomeData += LoadSomeData(); 
} 

void rb_CheckedChanged(x, y) 
{ 
    if (doLoadSomeData != null) 
    { 
     doLoadSomeData(); //need to load only once. 
    } 
    doLoadSomeData = null; 
    // rest of the code; to be executed every single time.. 
} 
関連する問題