Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > Формы в MDI


Автор: girovago 24.10.2007, 08:55
У меня MDI-приложение с кучей различных документов. Надо сделать чтобы была возможность открыть только один экземпляр конкретного документа.
Как узнать открыт ли в определенный момент экземпляр одной из форм? 

Автор: snav 24.10.2007, 09:48
Код
class MyForm : Form
{
    private static MyForm m_form = null;
}

При создании новой формы полю m_form присваивается ссылка на созданную форму, при закрытии формы поле обнуляется. Если при создании формы m_form != null, значит такая форма уже существует.

Автор: tol05 24.10.2007, 10:47
snav, MDI формы уже учитывают связи между родительским контейнером и его child и позволяют решать такие задачи без создания для ворм лишних ссылок-маркеров. 
Согласись, когда разработчики .Net претензиозно заявили "Мы позволяем создавать MDI-приложения", они ведь и какой-то код напедалили? smile

С помощью свойства родительского контейнера ActiveMdiChild  можно посмотреть какая из его дочерних форм сейчас активна. Проходом по массиву MdiChildren можно посмотреть, какие вообще сейчас формы открыты, ну и т.д. 
Вот недавно совсем был вопрос http://forum.vingrad.ru/forum/topic-178196/anchor-entry1293694/0.html

Одним словом, почитайте мануал, подберете нужное.


Автор: snav 24.10.2007, 10:59
Цитата
С помощью свойства родительского контейнера ActiveMdiChild  можно посмотреть какая из его дочерних форм сейчас активна. Проходом по массиву MdiChildren можно посмотреть, какие вообще сейчас формы открыты, ну и т.д.

Пожалуй, так действительно проще... smile

Автор: thomas 23.1.2009, 21:08
Привет всем.
Для того чтобы не допустить создания повторных экземпляров дочерних окон воспользовался методом с
http://www.codeproject.com/KB/architecture/singletonforms.aspx


tol05, 
Цитата

Согласись, когда разработчики .Net претензиозно заявили "Мы позволяем создавать MDI-приложения", они ведь и какой-то код напедалили? smile

к сожалению "не допедалили"  smile 

В msdn в разделах о MDI нет ни малейшго намека о проверке на существование созданного дочернего окна перед созданием нового.
Сколько не жми на кнопку, а каждый раз сождашь новое окошко, не смотря на то что оно вроде как уже и существует.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)