如何在MDI父表单中激活子表单时禁用父表单?

时间:2013-09-25 13:33:41

标签: c# winforms

How to Disable the Parent Form When a Child Form is Active and Within MDI Parent Form?

'添加产品'是MDI父表单的子项,“添加类别”是“添加产品”表单的子项。我已经使用以下代码

将“添加类别”绑定到MDI父窗体
        frm_Add_Category obj_AddCategory = new frm_Add_Category();
        obj_AddCategory.MdiParent = this.MdiParent;
        obj_AddCategory.Show();

现在它不会超出MDI Parent Form的边界。接下来我要做的是在弹出“添加类别”表单时禁用“添加产品”。我浏览了整个网络,但是当我解决这个问题时,“添加类别”将转到MDI父表单。我已经尝试过解释here的所有方法。

作为一个总结,我想做的是

  1. '添加类别'无法从MDI父表单中删除。
  2. 当“添加类别”弹出时,“添加产品”应禁用/取消选中。
  3. 当“添加类别”关闭时,
  4. '添加产品'应该启用/可点击。

2 个答案:

答案 0 :(得分:1)

禁用自由浮动表单(添加产品)不是一个好主意,因为当用户点击它时,它不会响应。可能会给用户带来一种奇怪的感觉,那个程序会发生类似的事情。

因此,如果您想在Add Category显示时阻止用户访问(添加产品),那么您可以通过将Add Category显示为模式来执行此操作。

试试这个

 using(frm_Add_Category obj_AddCategory = new frm_Add_Category())
 {
     if(obj_AddCategory.ShowDialog(this) == DialogResult.Ok)
     {
         //Save success
     }
     else
     {
         //Save cancelled
     }
 }

在旁注中,不要像这样命名变量和类。看起来很难看。如果我这样做,我会这样命名。这也可能不是最好的,但比以前的版本更好。让我们看看有关这方面的任何建议。

 using(AddCategoryForm addCategory = new AddCategoryForm())
 {
     if(addCategory.ShowDialog(this) == DialogResult.Ok)
     {
         //Save success
     }
     else
     {
         //Save cancelled
     }
 }

答案 1 :(得分:1)

要使MdiChild成为“模态”,您必须通过手动禁用其他所有内容来模拟它,然后在关闭该表单时重新启用它们。

快速举例:

    // ... running from within an MdiChild ...        

    private void button1_Click(object sender, EventArgs e)
    {
        foreach (Form child in this.MdiParent.MdiChildren)
        {
            child.Enabled = false;
        }

        Form3 f3 = new Form3();
        f3.MdiParent = this.MdiParent;
        f3.FormClosed += new FormClosedEventHandler(f3_FormClosed);
        f3.Show();
    }

    void f3_FormClosed(object sender, FormClosedEventArgs e)
    {
        foreach (Form child in this.MdiParent.MdiChildren)
        {
            child.Enabled = true;
        }
    }

这与普通的模态对话框不同,因为当您尝试单击应用程序中的其他表单时,它不会闪烁。