2011-01-20 88 views
1

this article中有一個關於如何使用TFrame作爲Delphi PageControl中的TTabSheet的替代方法的解釋。Delphi:管理TFrame的多個實例

我一直在思考一個類似的練習,上面似乎沒有提供解決方案,而且我的解決方案似乎過於複雜。

要求是針對標籤式界面,其中每個標籤可以是多種不同設計中的一種。每個設計都實現爲TFrame。由於應用程序的設計性質,我們可能會在任何特定時刻打開任何框架的多個副本(每個選項卡的內容不同,但不包括設計),以便用戶可以比較2/3個不同的項目在同一時間。

例如,在一個會話中我們可以具有3個選項卡打開,所有框架設計A. 的另一次我們可以具有3個選項卡中打開的每個幀A的,B和C

設計需要是我們可以根據要求將框架添加到設計中。

目前我的解決方案是讓單獨的TList管理我們打開的每種類型的框架,也許還有一個主TList來跟蹤打開的選項卡。正如我所說,過於複雜。

有沒有人有如何更簡單地處理這個問題的建議?

+4

我沒有得到*管理*的要求。特定幀的副本是不同的實例,對嗎?所以有什麼問題? IOW,你的*列表*提供什麼服務? – 2011-01-20 17:03:50

+0

這就是我喜歡SE的原因:)已經陷入了更大的概念,以減少它。塞爾塔克,你可以發佈這個答案,以便我可以接受:) – 2011-01-21 13:09:49

回答

1

我可能會忽略幀實例的主TList。

如果您需要它們,您可以通過直接詢問TPageControl或通過每個單獨的TList爲每個幀類型查詢它們。

除此之外,您的方法聽起來很合理。

1

我有一個應用程序,用我自己的菜單控件管理單個面板上的幀,以控制哪個幀可見。當我需要使框架可見時,我簡單地設置可見性:對於面板上的每個框架,除了我想要的框架之外,均爲= false。我掌握了面板上的內容,所以我知道至少每個控件都是一個Tframe,並且我可以遍歷Panel的Controls屬性來獲取每個框架。然後我使用接口在主窗體和框架之間進行通信。

現在,如果您想使用標準的Windows標籤式界面,您仍然可以按照您的建議使用頁面控件,您知道每個TtabSheet都有一個Tframe,並且您可以檢查它的類型並根據需要使用它。我不明白爲什麼你需要一個Tlist,因爲如果你真的需要在「Tframes列表」中找到,你可以通過迭代頁面控件中的TtabSheets來通過dyamically來構建它。

另一種方法與我的第一種方法類似,但獲得很好的Windows標籤,將使用TtabControl而不是TpageControl。使用TtabControl,您基本上只會得到一個代表所有選項卡的Tstrings實例(在Tabs屬性中)。由於它是一個Tstrings,你可以將一個對象(即你的Tframe)與每個項目以及每個選項卡相關聯。當您單擊一個選項卡時,您可以隱藏所有內容並顯示正確的Tframe。您還擁有您的列表,因爲它通過Tabs屬性附加到了TtabControl。你只需要自己處理幀的可見性。

0

我們使用TPageControl並創建運行時TTabSheet後代,它具有我們自己的TFrame的新屬性(我們不需要掃描。控件或.Components每次搜索框架)。