'添加产品'是MDI父表单的子项,“添加类别”是“添加产品”表单的子项。我已经使用以下代码
将“添加类别”绑定到MDI父窗体 frm_Add_Category obj_AddCategory = new frm_Add_Category();
obj_AddCategory.MdiParent = this.MdiParent;
obj_AddCategory.Show();
现在它不会超出MDI Parent Form的边界。接下来我要做的是在弹出“添加类别”表单时禁用“添加产品”。我浏览了整个网络,但是当我解决这个问题时,“添加类别”将转到MDI父表单。我已经尝试过解释here的所有方法。
作为一个总结,我想做的是
答案 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;
}
}
这与普通的模态对话框不同,因为当您尝试单击应用程序中的其他表单时,它不会闪烁。