2016-10-26 8 views
1

プログラムで作成したラベルがあり、それぞれに特定のイベントハンドラを付ける必要があります。だから、これをする代わりに:MethodInfoオブジェクトからAddressOfを取得する

AddHandler Label1.Click, AddressOf SomeSub1 
AddHandler Label2.Click, AddressOf SomeSub2 
AddHandler Label3.Click, AddressOf SomeSub3 
... 

私は上記を避けるためにループにそれを動作させることを望んでいた。だから私は作っ:

  • にラベル
  • 私が使用したラベルが

あるメインクラスから継承しているクラスのすべての私すでに構築された、プライベート潜水のA METHODINFO配列のリストを

Dim separateClass As New SeparateClass 
Dim methodInfo() As MethodInfo = separateClass.GetType.GetMethods(BindingFlags.NonPublic Or BindingFlags.Instance Or BindingFlags.DeclaredOnly) 

For i As Integer = 0 to End 
    labelList.Add(New Label()) 
    AddHandler labelList.Last.Click, AddressOf [Delegate].CreateDelegate(GetType(SomeDelegate), separateClass, methodInfo(i)).GetMethodInfo 
Next 

これはコンパイルされますが、サブがトリガーされていません。以下はまた、コンパイルが、同じように動作します。

For i As Integer = 0 to End 
    labelList.Add(New Label()) 
    AddHandler labelList.Last.Click, AddressOf methodInfo(i).getBaseDefinition 
Next 

私はMethodInfoオブジェクトのうち、適切なAddressOfを得ることができる方法はありますか?

+0

カスタムコントロールを作成してonClickイベントをオーバーライドする方が簡単かもしれません。http://stackoverflow.com/questions/6405458/how-do-i-make-custom-controls-in-c – Slai

+0

Clickイベントを登録していますあなたのフォーム上で使っているラベルではなく、 'New Label()'に書かれています。 'New'キーワードはここでは説明的です。確かに、それはうまくいかない、それらのラベルは見えない。 –

+0

私はこれらをメインフォームに追加するためにたくさんの余分なものを省きました。彼らは、テキスト、フォント、サイズ、そしてそれらのすべてのものを与えられて追加されます。私はちょうど私がここでそれをやっていないので、私は問題を抱えている部分だけに焦点を当てることができます。混乱させて申し訳ありません。 –

答えて

1

[Delegate].CreateDelegateはすでにデリゲートオブジェクトを作成しています。 AddressOfは使用しないでください。

ただし、キャストする必要があるかもしれません。

+0

男...これは悪いです。すでにEventHandlerという名前のEventDelegateが作成されているときにEventDelegateを作成しました.-私はあなたが提案した変更を行い、これで完全に修正されました。ありがとう。 –

関連する問題