我有一个ToolStripMenuItem,其中包含在我的应用程序中打开的所有MdiChildren的列表(ToolStripDropDownItem的列表)。此列表是通过使用MenuStrip.MdiWindowListItem属性自动生成的(实际上,我在设计器中将其设置了,但结果是相同的。)
我想在每个下拉项目旁边显示Mdi表单图标。因此,我在调试应用程序时检查了下拉菜单项的属性,然后看到了这个(名为MdiForm的属性):
所以我试图写类似的东西来访问它(使用反射):
foreach (ToolStripDropDownItem item in (sender as ToolStripMenuItem).DropDownItems)
{
var type = item.GetType();
var field = type.GetProperty("MdiForm");//Return null always
...
}
但是,这不会返回MdiForm属性。变量“字段”始终为空。 深入研究,我意识到虽然“ item”具有MdiForm属性,但item.GetType()不会返回相同的属性!
查看ToolStripMenuItem.cs源代码here,我看到的是:
internal ToolStripMenuItem(Form mdiForm) {
Initialize();
Properties.SetObject(PropMdiForm,mdiForm);
}
这:
internal Form MdiForm {
get {
if (Properties.ContainsObject(PropMdiForm)) {
return Properties.GetObject(PropMdiForm) as Form;
}
return null;
}
}
但是我不确定如何访问它。