Некоторые формы, которые я хочу загрузить только один раз родителем MDI. Итак, в событии click элемента menu я смотрю, содержит ли свойство родительского MDI .Children уже форму, и форма загружается, только если ее еще нет среди дочерних элементов:
bool alreadyLoaded = false;
if (this.MdiChildren.Length > 0)
{
foreach (Form frm in this.MdiChildren)
{
if (frm.Name == "foo")
{
alreadyLoaded=true;
break;
}
}
}
if (! alreadyLoaded)
{
FOO f = new FOO();
f.MdiParent=this;
f.Show();
}
Но если нетерпеливый пользователь быстро нажимает на пункт меню при первой загрузке формы, он может быть загружен более одного раза. Второй и третий щелчки по пункту меню запускают новую копию формы до того, как экземпляр, загруженный первым щелчком мыши, будет полностью создан.
Полагаю, я мог бы поддерживать свой собственный список имен запущенных форм и в обработчике события click элемента menu добавить имя формы в список, если его еще нет, а затем удалить его из списка в закрытой дочерней форме обработчик события. Но есть ли лучший способ?