webmail123 Ответов: 1

Запретить открытие нескольких дочерних форм в форме 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

Ваш код и ваши утверждения о вашем коде не имеют смысла. Попробуйте объяснить подробнее.

1 Ответов

Рейтинг:
9

RossMW

Я бы сделал что-нибудь подобное....

    private void mnuSearchItem_Click(object sender, EventArgs e)
    {
        Boolean IsFormShown = false;
        foreach (Form ChildForm in this.MdiChildren)
        {
           if (ChildForm.Name == "frmItemData")
            {
                IsFormShown = true;
                ChildForm.Focus();
            }  // End if
        } // end for
        if (!IsFormShown)
        {
        Cursor.Current = Cursors.WaitCursor;
        itemData = new frmItemData();
        itemData.MdiParent = this;
        itemData.Font = this.Font;
        itemData.Show();
        Cursor.Current = Cursors.Default;
    }  // End If
}


webmail123

Спасибо Вам за решение. Я постараюсь и дам вам знать.