【发布时间】:2012-06-01 13:51:44
【问题描述】:
好的,感谢ILSpy,我知道 MenuItem 类包含一个名为 MenuItemData 的 internal 类,它自身包含一个 onDrawItem 的strong>内部成员。
给定一个 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 函数。有什么线索吗?
----编辑----
我的目标是删除 menuItem 的基本事件处理程序,名为DrawItem。请参阅接受的答案中的this post 和函数RemoveClickEvent,以便更好地理解。
【问题讨论】:
-
那不是 C#,那是 Visual Basic。它仍然是视觉工作室,但标签是错误的。
-
我添加了 C# 标签,这样如果有人在 C# 中有答案,他可以添加它
标签: c# vb.net winforms reflection internal