具有父表单作为背景的模态表单

时间:2012-03-31 06:07:47

标签: c# modal-dialog

我如何将黑色表单作为背景,并且一次打开一个模式表单,其所有者是黑色表单?我需要这两个来保持他们的秩序(最小化和最大化),这就是我选择模态形式的原因。

我制作了一个黑色背景的简单主窗体,并以对话框(模态)形式打开了一个窗体。主窗体为我提供黑色背景,模态窗体保留在黑色背景前面。但是在打开新表单时,我无法将新模态表单的所有者设置为上述黑色表单。我试过传递黑色表单对象并注册事件无济于事。

您是否知道实施以下方案的任何机制:

黑色形式作为背景,一系列模态形式一次一个地在黑色形式前面打开,黑色形式是每个模态形式的所有者。

由于

修改

请考虑这种情况:我有3个名为 frmBlack Form1 Form2 的表单。我使用 frmBlack 作为主要黑色表单。在此表单上放置一个按钮后,我调用Form1Object.ShowDialog(this)。现在假设我要导航到第三种形式(Form2),[这意味着我必须关闭Form1Object]我在第二个窗体(Form1)上放了一个按钮,当按下这个按钮时我必须关闭Form1对象并导航到Form2Object,而ShowDialog()函数中的所有者必须设置为frmBlack。

3 个答案:

答案 0 :(得分:0)

这是使用MDI Forms完成的。

您的应用将如下所示:http://www.datadynamics.com/Help/AB3/Images/MDI%20Child%20menu.gif

这适用于winform项目,而不适用于WPF项目(至少在默认情况下不是这样)。

答案 1 :(得分:0)

家长还是老板?这是一个区别。 Parent仅用于MDI-Applications(请参阅Luigi的帖子)。可以在对ShowDialog( owningForm )的调用中设置所有者。

你想要实现的目标是什么?

HTH

马里奥

答案 2 :(得分:0)

使用第二个按钮后包装到frmBlack,从窗口中实现您想要的效果并让它完成工作。 或者更具体地在frmBlack内设置一个标记,因为在frm1.btnShowNextForm中您需要关闭frm1 ...

还要看一下Form.Owner

frm1.buttonShowNextFormClicked()

中的这些内容
{
   if ( null != Owner )
   {
      FrmBlack frmBlackLocal = Owner as FrmBlack;

      if ( null != frmBlackLocal )
      {
         frmBlackLocal.NextAction = FrmBLack.NextActions.ShowForm2; //an enum
      }
   }

   Close();
}

和frmBlack

{

   frm1.ShowDialog(this);

   if ( NextAction == NextActions.ShowForm2)
   {
      frm2.ShowDialog(this);
   }
}

嗯,当然它需要一些刷新(比如在它自己的函数中提取下一个处理程序,但你应该明白这一点。

HTH

马里奥