Запретить открытие нескольких дочерних форм в форме MDI
Я знаю, что эта проблема или проблема решена ранее, но у меня есть проблема в этом. Так что, пожалуйста, помогите мне.
У меня есть форма MDI и 3-4 детские формы. Я хочу отключить, чтобы открыть несколько дочерних форм. У меня есть кодировка из предыдущего поста. И это прекрасно работает. Но когда я закрываю эту форму и пытаюсь открыть ту же самую форму снова, используя то же самое меню, она не открывается.
Что я уже пробовал:
frmItemData itemData; private void mnuSearchItem_Click(object sender, EventArgs e) { if (itemData == null) { itemData = new frmItemData(); itemData.MdiParent = this; itemData.FormClosed += ItemData_FormClosed; itemData.Show(); } }
С помощью этого кода можно избежать открытия нескольких дочерних форм. Но проблема в том, что когда я открываю эту форму, закрываю ее и когда я пытаюсь снова открыть ту же форму, нажав на кнопку меню, то форма не открывается. Я отладил код, и после первого раза itemData всегда возвращает Not Null.
Так может ли кто-нибудь помочь мне с этим?
#realJSOP
Если вы не хотите, чтобы можно было открывать несколько форм MDI, почему ваше приложение является приложением MDI?
webmail123
Так что, если вы обратите внимание на название, а также код, у меня нет нескольких форм MDI.
Dave Kreskowiak
Ты хоть представляешь, что такое МДИ? Почему вы им пользуетесь?
webmail123
Да, у меня есть представление о формах MDI. Мне нужно, чтобы эти формы рассматривались другими формами как дочерние формы для удобства использования с точки зрения пользователя.
Dave Kreskowiak
Я позволю себе не согласиться. MDI расшифровывается как "множественный интерфейс документов". Подумайте о блокноте, но возможность открывать несколько текстовых файлов в одном окне. Все эти дочерние окна редактора являются одним и тем же классом, редактирующим один и тот же тип документа. Теперь можно использовать несколько классов редактора в качестве дочерних окон, но большинство людей думают, что они должны использовать MDI, чтобы иметь возможность открывать несколько окон, которые не имеют ничего общего с редактированием чего-либо в качестве дочерних MDI. Вы не. МДИ теперь следует использовать очень редко.
Теперь, если у вас есть законная причина использовать MDI, отлично. Имейте на это право. "Простота использования" не является законной причиной. "Как" и "почему" вы используете его-это вопросы, которые вы должны задавать.
Ограничение дочернего окна MDI только одним экземпляром летит в лицо использованию MDI.
webmail123
Спасибо за объяснение. Я буду иметь это в виду и искать другой способ реализации того же самого.
j snooze
что такое itemData? Почему бы не установить itemdata в null, когда дочерняя форма закрыта?
webmail123
Извиняюсь. Я забыл упомянуть об этом в коде. Теперь я обновил код. ItemData-это объект frmItemData. Я установил itemdata=null в событии frmItemData close. Но это все равно то же самое.
BillWoodruff
Ваш код и ваши утверждения о вашем коде не имеют смысла. Попробуйте объяснить подробнее.