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

C# 如何在子窗体处于活动状态时禁用父窗体,c#,C#,我是C#的一名新生,正在使用Microsoft Visual C#2013 我的目标是 在其父窗体内打开子窗体 当子窗体处于活动/打开状态时,禁用父窗体 在VB.net中使用 frmStuDetails.ShowDialog() 我试过了 一, 结果…但问题是子窗体没有在父窗体/容器中打开 二,。 在MDI下的父调用按钮 frmViewStuList childForm = new frmViewStuList(this); childForm.Owner = this; childForm.

我是C#的一名新生,正在使用Microsoft Visual C#2013

我的目标是

  • 在其父窗体内打开子窗体
  • 当子窗体处于活动/打开状态时,禁用父窗体
  • 在VB.net中使用

    frmStuDetails.ShowDialog()
    
    我试过了

    一,

    结果…但问题是子窗体没有在父窗体/容器中打开

    二,。 在MDI下的父调用按钮

    frmViewStuList childForm = new frmViewStuList(this);
    childForm.Owner = this;
    childForm.Show();
    
    childForm\u下激活

    if (this.Owner != null)
    {
        this.Owner.Enabled = false;
    }
    
    childForm\u下停用

    if (this.Owner != null)
    {
        this.Owner.Enabled = true;
    }
    
    结果…它使子窗体处于活动状态,但在子窗体关闭时冻结父窗体

    三,

    结果…这似乎是最好的选择,但子窗体不会在父窗体中打开

    如果你有其他想法,请帮忙


    谢谢

    禁用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);
    }
    

    谢谢你的意见,我有一个工作围绕它
    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;
    } 
    
    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);
    }