2011-12-04 11 views
0

イベントに登録して実行時にいくつかのアクションを実行するにはどうすればよいですか?例えばイベントに登録し、実行時に新しいメソッドを作成する - c#

ユーザーがのがOnMyEvent引数でいくつかのtextBoxを初期化するとしましょう、私はOnMyEventに登録しMyFuncを実行するボタンをクリックしてください。私はリサイズや.NETを使用してい

4.

EDIT

は、たぶん私は...私は、既存のイベントに登録し、実行する新しいメソッドを追加する機能が不明で必要とされましたイベントが発生します。実行時にすべて。

EDIT2 私は は、私は多くのイベントがOnDataSendなどをOnDataRecivedている「A」という名前のクラスを持っていることを言うことができます...例をあげてみます... ユーザーを実行しているアプリケーションを選択することができます登録するコンボボックスのイベント名を作成します(constractsではないため、反射を介してイベントリストを取得し、XMLファイルから生成されます)、choosedイベントが発生したときに更新するデータ。

この例では、ユーザーはOnDataReceivedに登録することを選択し、DataStreamという名前のプロパティーを更新することを選択します。ユーザーが選んだ時に、実行時間の一部は、コード...

A.OnDataReceived += (s,e) => MyRunTimeMethod(s,e); 

private void MyRunTimeMethod(object sender, EventArgs e) 
{ 
    DataStream = e.Data.Value 
} 
+0

あなたは** WPF **または** Winforms **を使用していますか? –

+0

質問に関連しない動的および式ツリータグが削除されました。 – Hammerstein

+0

あなたは作業しているコードを持っていますか? –

答えて

1

する必要があります - あなたは、デリゲートでそのメソッドへの参照を持っていたら、イベントへの登録方法の質問は簡単です。

MSDNは、MSIL命令でこれを行う方法を説明しています。私はそれがあなたが探しているものだとは思っていませんが、それはオプションです。

C# FAQ blogには、表現木を使ったはるかに興味深い解決策があります。私はこれがもともとあなたのポストにexpression-treeをタグ付けすることによってあなたが参照していたものだと思います。

しかし、私はダイナミックメソッドを使って再考します。ユーザーは、自分の選択したイベントでどのようなアクションを実行するのかを具体的にどのくらい指定する予定ですか?私はオプションがあなたがより単純な何かを得ることができるように十分に限られていると思う:

protected void btnRegister_Click(object sender, EventArgs e) { 
    switch (cmbEvents.SelectedText) { 
     case "OnLoad": 
      MyControl.OnLoad += (s, e) => SomeSelectedControl.Text = SomeInputControl.Text; 
      break; 

     //... other cases 
    } 
} 
+0

最初のすべてのtnxの答えです。はい、私は式ツリーをタグ付けし、誰かが私の投稿を編集し、それを削除する理由を知りません。あなたの答えについては、すべての場合に動作するかどうかを確認する必要があります。もしあなたが別のアイデアを持っていれば、私は読んでくれてうれしい。再度、感謝します – david

1

ボタンをダブルクリックし、Windowsフォームを使用している場合に作成on_clickイベントにあなたをもたらすでしょう。ボタンのプロパティウィンドウを表示すると、イベントタブが表示されます。これを見ると、コントロールで利用できるイベントが表示されます。

これを理解するには、イベントを追加するときに作成されたコードを調べるのが最善の方法でした。

更新:述べたように

、私は完全に私の答えでポイントを逃しました。実行時にイベントにサブスクライブする構文は、フォームInitializeで実行されるのと同じ方法です。だから私は間違った用語を得ていない、ここではmsdnのドキュメントへのリンクです。あなたが達成したい何

http://msdn.microsoft.com/en-us/library/ms366768.aspx

+1

彼は_runtime_について質問していますか? –

+1

はい、私の答えは、私が考えていた方法を説明するための詳細が欠けています。 – Hammerstein

+0

@Hammerstein問題は、イベントで実行されるwollが – david

1

は、「実行時にイベントに登録」する必要はありません。

ここで興味のあるボタンがbutton1の場合は、単に使用してください。

button1.Click += buton1_ClickHandler; 

button1_ClickHandlerは、button1と同じクラスに定義する必要があります。 RoutedEventHandlerのシグネチャを持つ必要があります。だから、それはあなたが実行時に動的にメソッドを作成する方法を求めている

private void button1_ClickHandler(object sender, RoutedEventArgs e) 
{ 
    //method code here 
} 
+0

を実行する新しいメソッドを作成することですが、実行時にメソッドにコードを追加するにはどうすればよいですか? – david

+0

あなたは実行するまでどのコードを実行するか分からないと言っていますか? – gprasant

+0

私の更新を参照してください – david

関連する問題