ILSpyのおかげで、MenuItemクラスには MenuItemData という名前の内部クラスが含まれており、この内部クラスにはonDrawItemという名前の内部メンバーが含まれていることがわかりました。
MenuItem を指定して、メンバー onDrawItem に対応するオブジェクトを取得したいと考えています。しかし、私ができることは、オブジェクト自体ではなく、FieldInfo を取得することだけです。
これが私のコードです:
Dim obj As Object
Dim fi As FieldInfo
Dim item as System.Windows.Forms.MenuItem
Dim mType As System.Type
mType = item.GetType()
mType = mType.GetMember("MenuItemData", BindingFlags.NonPublic)(0)
fi = mType.GetField("onDrawItem", BindingFlags.Static Or BindingFlags.Instance Or BindingFlags.NonPublic)
obj = fi.GetValue(item)
最後の行に到達すると、次のようなエラーが表示されます (翻訳されています)。
タイプ「System.Windows.Forms.MenuItem+MenuItemData」で定義されたフィールド「onDrawItem」は、タイプ「System.Windows.Forms.MenuItem」のターゲット オブジェクトのフィールドではありません
最後の行で GetValue 関数に渡すオブジェクトがわかりません。どんな手掛かり?
- - 編集 - -
私の目標は、 DrawItemという名前の menuItem の基本 eventHandlerを削除することです。理解を深めるために、この投稿と受け入れられた回答の関数を参照してください。RemoveClickEvent