プログラムで作成したラベルがあり、それぞれに特定のイベントハンドラを付ける必要があります。だから、これをする代わりに: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
を得ることができる方法はありますか?
カスタムコントロールを作成してonClickイベントをオーバーライドする方が簡単かもしれません。http://stackoverflow.com/questions/6405458/how-do-i-make-custom-controls-in-c – Slai
Clickイベントを登録していますあなたのフォーム上で使っているラベルではなく、 'New Label()'に書かれています。 'New'キーワードはここでは説明的です。確かに、それはうまくいかない、それらのラベルは見えない。 –
私はこれらをメインフォームに追加するためにたくさんの余分なものを省きました。彼らは、テキスト、フォント、サイズ、そしてそれらのすべてのものを与えられて追加されます。私はちょうど私がここでそれをやっていないので、私は問題を抱えている部分だけに焦点を当てることができます。混乱させて申し訳ありません。 –