Как открыть диалоговое окно формы из дочерней формы MDI (приложение MDI)

У меня есть основная форма MDI, пункт меню, который показывает дочернюю форму (назовем ее frmEmployees), внутри этой формы Button (btnNew...), как мне открыть отсюда форму как Dialog (frmNewEmployee); Я имею в виду, что frmEmployees недоступен, пока frmNewEmployee не будет закрыт.

// Main_Form_Load
Main_Form.IsMdiContainer = true;

Из пункта меню в главной форме я открываю frmEmployees

// MenuItem_Click
frmEmployees frmEmp = new frmEmployees();
frmEmp.MdiParent = this;
frmEmp.Show();

из кнопки я открываю другую форму

// newButton_Click
frmNewEmployee frmNE = new frmNewEmployee();
frmNE.MdiParent = this.MdiParent;
//frmNE.Show();      // OK, but allows return to frmEmployees
frmNE.ShowDialog();  // here comes the problem

Есть ли способ заблокировать frmEmployees, пока frmNewEmployee открыт?

Заранее спасибо!


person Shin    schedule 11.01.2013    source источник


Ответы (2)


Не устанавливайте frmNE.mdiParent. Пусть экземпляр будет потомком frmEmployees. Чтобы повторить, не устанавливайте свойство mdiParent и вызывайте frmNE.ShowDialog(), и заблокированной формой будет frmEmployee.

person U1199880    schedule 11.01.2013

namespace ModalTest
{
    using System;
    using System.Windows.Forms;

    public partial class frmMain : Form
    {
        frmEmployees frmEmp = new frmEmployees();
        frmNewEmployee frmNE = new frmNewEmployee();

        public frmMain()
        {
            InitializeComponent();
            IsMdiContainer = true;
        }

        private void btnGo_Click(object sender, EventArgs e)
        {
            frmEmp.MdiParent = this;
            frmEmp.Show();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            frmNE.MdiParent = frmEmp.MdiParent;
            frmEmp.Hide();
            frmNE.Show();
        }
    }
}

По сути, я назначил третью форму frmNE родителю второй формы frmEMP, а затем использовал frmEmp.Hide(), чтобы скрыть форму от просмотра. Использование '.ShowDialog()', как я упоминал выше, заставляет вашу третью форму стать модальной и, таким образом, требует, чтобы она была удовлетворена, прежде чем выполнение может быть продолжено.

person Brian    schedule 11.01.2013