2013-07-23 172 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的額外'我想也許我建議你在箱子裏想'?'我會;) –