显示限制在标签页中的表单

时间:2013-07-23 20:03:52

标签: .net winforms

我们有一些UserControls(每个都有自己的演示者)。每个人都住在主表单的TabPage中。

其中一个具有您可以与之交互的对象的图形显示。当采取某些行动时,我们需要从用户那里收集一些信息,因此我们会弹出一个表格(您可以将其称为对话框)。我们希望此表单仅在该标签页中可见,因此您可以转到另一个标签以检查某些信息并返回等等。

我们尝试在表单上设置.TopLevel = false,但这会导致某些weird behavior无法接受。各种典型的解决方案(使用MDI,表格上没有边框等)在我们的环境中不起作用。

我们还有其他方法可以达到预期的行为吗?

1 个答案:

答案 0 :(得分:2)

您的问题让我想起了WPF中类似问题的解决方案。让我尽力解释这个问题及其解决方案。

问题是为业务逻辑提供一种方法,通过“交互请求”与用户交互,然后在用户界面的适当区域中处理。业务逻辑不会意识到交互中涉及的UI,但会启动请求事件,然后将其作为UI处理。我无法再找到这个例子,无论如何它都是WPF中心,但他基本上是通过创建一个模仿Modal对话框外观的控件来处理它。然后,他创建了一个处理Interaction事件的Action,并自动将Faux Dialog插入TabPage中其他控件之上的TabPage。一个技巧是Action假定将Faux Dialog插入到作为其父级的网格控件中。

所以基本上这就是我所说的......作为一种可能的解决方案

  1. 创建一个看起来就像模态对话框的UserControl。除了它包含在透明区域以填充其容器。
  2. 将它插入到TabPage的控件集合中,并在其他所有控件之上插入。停靠它以填充TabPage。
  3. 实际上,这里有一些照片..

    Tab Page without dialog

    然后当你添加用户控件时..你有一个虚假的对话框,实际上有一个透明的区域,它填满了标签页..

    Fake Dialog

    这里的想法是你将无法与它下面的控件进行交互,因为它位于顶部,但它仍然位于标签页中,因此它不会影响与其他标签的交互。第二张图像的蓝色部分实际上应该是透明的,以给你一种它不存在的错觉,但是阻止与它下面的控件交互。

    这有一些限制,因为您无法使对话框大于标签页。

    我想也许我建议你“在盒子里面”思考?