0

我们有一些用户控件(每个都有自己的演示者)。每个人都生活在主窗体上的 TabPage 中。

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

我们尝试.TopLevel = false在表单上进行设置,但这会导致一些不可接受的奇怪行为。对此的各种典型解决方案(使用 MDI、表格无边界等)在我们的情况下不起作用。

还有其他方法可以实现所需的行为吗?

4

1 回答 1

2

您的问题让我想起了 WPF 中类似问题的解决方案。让我尽力解释问题和他的解决方案。

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

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

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

其实这里有几张图。。

没有对话框的标签页

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

假对话

这里的想法是您将无法与其下方的控件进行交互,因为它位于顶部,但它仍将位于选项卡页面内,因此它不会影响与其他选项卡的交互。第二张图片的蓝色部分实际上应该是透明的,给你一种它不存在的错觉,但防止与它下面的控件交互。

但是,这有一些限制,因为您不能使对话框大于标签页。

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

于 2013-07-23T21:45:58.863 回答