2013-07-23 126 views
0

我们有一些用户控件(每个都有自己的主持人)。每个人都住在主窗体上的一个TabPage中。显示一个表格中的表格

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

我们尝试在窗体上设置.TopLevel = false,但这会导致一些weird behavior即不能接受的。对此的各种典型解决方案(使用MDI,没有形式边界等)在我们的情况下不起作用。

有没有其他方法可以达到理想的行为?

+0

快速回答是:不是真的。最好记录将TopLevel更改为false时会出现什么问题。 – LarsTech

+1

只要不显示带有标题栏的窗体。这样做没有意义。它看起来不正确,用户可以将表单移出标签页,但无法将其取回。如果您需要标题,则只需使用标签即可。 –

回答

2

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

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

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

  1. 创建一个用户控件,看起来就像一个模态对话框。除了包含在透明区域以填充其容器。
  2. 是否将其插入到TabPage的控件集合中,并放置在所有其他控件的顶部。停靠它来填充TabPage。

其实,这里的一些照片..

Tab Page without dialog

然后当你添加的用户控件..你有这实际上有它周围的透明区域假对话,填补标签页..

Fake Dialog

这里的想法是,你将无法与它下面的控件进行交互,因为它是上p,但它仍然在标签页内,因此它不会影响与其他标签的交互。第二幅图像的蓝色部分实际上应该是透明的,以便让您看到它不存在的错觉,但是防止与其下面的控件进行交互。

虽然这有一些限制,因为您不能让对话框大于标签页。

我想也许我建议你认为“箱内”?

+1

如果我可以给你一个+1的额外'我想也许我建议你在箱子里想'?'我会;) –