当子表单处于活动状态时,如何使MDI表单处于非活动状态

时间:2010-09-16 09:53:03

标签: c# winforms

我在我的应用程序中放置了一个MDI表单。如果我从文件菜单中选择一个选项,因为New我将加载一个子表单。

我的代码如下所示,以显示子表单

  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 个答案:

答案 0 :(得分:3)

这样给出

if (IsOpen == false)
        {

    Form childForm = new FrmMain();
         childForm.TopLevel=true;
         childForm.ShowInTaskbar=false;
         childForm.ShowDialog();
        }

答案 1 :(得分:2)

这是关于MDI的基础,儿童形式不能成为模态。您使用ShowDialog()并确保您没有设置MdiParent属性。这样的对话框不受MDI父级边界的约束,您可以使用StartPosition属性使其居中。像这样:

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

当然,您不必再检查表单是否已存在,它是模态的。