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

本文关键字:MDI 窗体 开窗 对话框 应用程序 | 更新日期: 2023-09-27 17:51:20

我有一个MDI主窗体,一个显示子窗体的菜单项(让我们称之为frmEmployees(,在这个窗体内有一个Button(btnNew…(,我如何从这里打开一个窗体作为对话框(frmNewEmployee(;我的意思是,在frmNewEmployee关闭之前,无法访问frmEmployees

// 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

frmNewEmployee打开时,是否有任何方法阻止frmEmployees

提前感谢!

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

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

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