如何从MDI子窗体(MDI应用程序)打开窗体对话框

时间:2013-01-11 22:15:17

标签: c# winforms dialog mdi mdichild

我有一个MDI主窗体,一个菜单项,显示一个子窗体(让我们称之为frmEmployees),在这个窗体里面Button(btnNew ...),我如何打开这里有一个表格作为对话框(frmNewEmployee);我的意思是,在frmEmployees关闭之前无法联系frmNewEmployee

// Main_Form_Load
Main_Form.IsMdiContainer = true;

从主窗体的菜单项中,我打开frmEmployees

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

从Button,我打开另一个表单

// 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的方法?

提前致谢!

2 个答案:

答案 0 :(得分:4)

不要设置frmNE.mdiParent。让实例成为frmEmployees的孩子。要重做,请不要设置mdiParent属性并调用frmNE.ShowDialog(),并且阻止的表单将是frmEmployee。

答案 1 :(得分:0)

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()'会强制你的第三个表单变为模态,因此在执行继续之前需要满足它。