0

当子窗体处于活动状态并在 MDI 父窗体中时,如何禁用父窗体?

“添加产品”是 MDI 父窗体的子窗体,“添加类别”是“添加产品”窗体的子窗体。我已经使用以下代码将“添加类别”绑定到 MDI 父表单

        frm_Add_Category obj_AddCategory = new frm_Add_Category();
        obj_AddCategory.MdiParent = this.MdiParent;
        obj_AddCategory.Show();

现在它不会超出 MDI 父窗体的边界。接下来我要做的是在“添加类别”表单弹出时禁用“添加产品”。我浏览了整个网络,但是当我修复这个“添加类别”时,它会出现在 MDI 父表单中。我已经尝试了这里解释的所有方法。

作为一个夏天,我想做的是

  1. '添加类别' 不能从 MDI 父窗体中退出。
  2. 当“添加类别”弹出时,“添加产品”应禁用/不可点击。
  3. 当“添加类别”关闭时,“添加产品”应该启用/可点击。
4

2 回答 2

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
     }
 }
于 2013-09-25T13:52:09.150 回答
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;
        }
    }

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

于 2013-09-25T14:23:13.117 回答