У меня есть 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 здесь , я вижу это:
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;
}
}
Но я не уверен, как получить к этому доступ.