2011-08-06 14 views
0
var myassembly = BuildAssembly(new System.IO.StreamReader("Code.txt").ReadToEnd()); 

       Type tip = myassembly.GetType("Form1"); 
       var obje = Activator.CreateInstance(tip); 


       var obj = treeView1; 
       string eventName = "NodeMouseClick"; 

       var evt = obj.GetType().GetEvent(eventName); 



       TreeNodeMouseClickEventHandler myCode =(s,k)=> 
       { 
        tip.InvokeMember("Node", 

           BindingFlags.InvokeMethod | BindingFlags.Instance |  BindingFlags.Public, 

           null, obje ,new object[]{s,k}); 

       }; 
       evt.AddEventHandler(obj, myCode); 

私は、ボタンのクリックイベントにしたい場合、私はEventHanler.Iを使用する必要があり、このcode.Butでイベントハンドラにコントロールを追加することができます取得するイベントタイプが であればハンドラは次のように自動的に入力取得したいですKeyDownEventHanlerを追加するにはどうすればいいですか?ありがとうは、ハンドラの種類を自動的に

答えて

0

Delegate.CreateDelegate(...)メソッドで任意のタイプのデリゲートを作成できます。また、 "Node"メソッドを呼び出すためにInvokeMemberを使用する匿名メソッドを作成することは、Nodeメソッドのパラメータがデリゲートのパラメータと互換性があり、パラメータの特別な変換が不要である限り、必要ではありません。そして、代わりに

TreeNodeMouseClickEventHandler myCode =(s,k)=> 
{ 
    tip.InvokeMember("Node", 
     BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public, 
     null, 
     obje, 
     new object[]{s,k}); 
}; 

のちょうどデリゲートを作成する「ノード」の方法、それは、そのイベントが期待する同じ型のものである:

MethodInfo NodeMethod = tip.GetMethod("Node", BindingFlags.Instance | BindingFlags.Public); 
Delegate myCode = Delegate.CreateDelegate(evt.EventHandlerType, obje, NodeMethod); 
+0

おかげで、それが働いている多くの – YardimaIhtiyaciOlan

関連する問題