Как сделать форму MDI неактивной, если активна дочерняя форма - PullRequest
2 голосов
/ 16 сентября 2010

Я поместил форму MDI в своем приложении. Если я выберу опцию из меню «Файл» как «Новый», у меня будет загружена дочерняя форма.

Мой код следующий, чтобы показать дочернюю форму

  private void ShowNewForm(object sender, EventArgs e)
    {
        foreach (Form frm in Application.OpenForms)
        {
            if (frm.Text == "Main")
            {
                IsOpen = true;
                frm.Focus();
                break;
            }
        }
        if (IsOpen == false)
        {
            Form childForm = new FrmMain();
            childForm.MdiParent = this;
            childForm.Show();
        }
     }

Теперь, что мне нужно, когда дочерняя форма находится в активном состоянии, я хотел бы, чтобы мой MDI не активировался до тех пор, пока пользователь не закроет дочернюю форму.

Вообще для форм напишем

        frm.showDialog()

Так, как решить это

Ответы [ 2 ]

3 голосов
/ 16 сентября 2010

дай вот так

if (IsOpen == false)
        {

    Form childForm = new FrmMain();
         childForm.TopLevel=true;
         childForm.ShowInTaskbar=false;
         childForm.ShowDialog();
        }
2 голосов
/ 16 сентября 2010

Это фундаментально для MDI, дочерняя форма не может быть модальной.У вас есть для использования ShowDialog () и убедитесь, что вы не установили свойство MdiParent.Такой диалог не ограничен границами родителя MDI, вы можете использовать свойство StartPosition для его центрирования.Например:

        using (var dlg = new Form2()) {
            dlg.StartPosition = FormStartPosition.CenterParent;
            if (dlg.ShowDialog(this) == DialogResult.OK) {
                // Use dialog properties
                //...
            }
        }

Конечно, вам больше не нужно проверять, существует ли уже форма, она модальная.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...