如何在子窗体处于活动状态时禁用 MDI父窗体

本文关键字:窗体 MDI 活动状态 | 更新日期: 2023-09-27 18:32:46

我是 C# 的新学生,正在使用Microsoft Visual C# 2013。

我的目标是

  1. 在其 MDI父窗体中打开子窗体
  2. 禁用 MDI父窗体,当子窗体处于活动状态/打开状态时

VB.net 更容易

frmStuDetails.ShowDialog()

我试过了

1.

MyChildForm childForm = new MyChildForm();
childForm.ShowDialog(this);

结果。。。。但问题是子窗体无法在 MDI父窗体/容器中打开

阿拉伯数字。在 MDI父呼叫按钮下

frmViewStuList childForm = new frmViewStuList(this);
childForm.Owner = this;
childForm.Show();

childForm_Activated

if (this.Owner != null)
{
    this.Owner.Enabled = false;
}

childForm_Deactivate

if (this.Owner != null)
{
    this.Owner.Enabled = true;
}

结果。。。。。它使子窗体处于活动状态,但在子窗体关闭时冻结 MDI父

窗体

3.

ChildForm child = new ChildForm();
child.Owner = this;
child.Show();
// In ChildForm_Load:
private void ChildForm_Load(object sender, EventArgs e) 
{
  this.Owner.Enabled = false;
}
private void ChildForm_Closed(object sender, EventArgs e) 
{
  this.Owner.Enabled = true;
} 

结果。。。。这似乎是最佳选择,但子窗体无法在 MDIparent 中打开

如果您有任何其他想法,请提供帮助

谢谢

如何在子窗体处于活动状态时禁用 MDI父窗体

禁用

MDI 父级也会禁用对 MDI 子项的访问,因此这不是可行的方法。如果您已经在"伪造"MDI子项,我宁愿将子窗体作为模态对话框打开。您可以设置其样式并将其居中,因此感觉更像是 MDI 应用程序的一致部分。

private void openChildDialogToolStripMenuItem_Click(object sender, EventArgs e)
{
    var childForm = new ChildForm
    {
        ShowInTaskbar = false,
        MinimizeBox = false,
        MaximizeBox = false
    };
    childForm.StartPosition = FormStartPosition.CenterParent;
    childForm.ShowDialog(this);
}