2013-09-25 187 views
0

How to Disable the Parent Form When a Child Form is Active and Within MDI Parent Form?如何在MDI父窗体中激活子窗体时禁用父窗体?

'添加产品'是MDI父窗体的子项,'添加类别'是'添加产品'窗体的子项。我已经通过使用以下代码将'添加类别'绑定到MDI父窗体

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

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

作为夏日什么,我想要做的就是

  1. “添加目录”无法从MDI父窗体出去。
  2. '添加产品'应该禁用/不可点击'添加类别'弹出。
  3. 'Add Product'应该在'Add Category'关闭时启用/点击。
+0

从我在屏幕截图中看到的内容中,我不认为**添加类别表单是添加产品表单的子元件** –

+0

@KingKing有一个按钮叫做“添加新类别” '添加产品'。 – AmilaDG

+0

“AddCategory”显示为模态吗? –

回答

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 
    } 
} 
+0

'ShowDialog'只适用于非顶层窗体。 “AddCategory”表单具有“主窗体”作为其“Mdi Parent”,所以这不起作用。我也试过了。 –

+0

@KingKing你应该注意到我删除了'MdiParent',这是多余的。 :) –

+0

但是,这可能不是OP想要的。 *将所有子窗体*放入主* Mdi父窗口*的想法与使用任何对话框不同。 –

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; 
     } 
    } 

这将是比正常的模态对话框不同,但是,因为当您尝试点击其他形式的应用程序也不会闪烁。

相关问题