Delphi:管理多个TFrame实例

时间:2011-01-20 16:03:26

标签: delphi tframe

this article中有一个解释,说明如何在Delphi PageControl中使用TFrames替代TTabSheets。

我一直在思考类似的练习,上面似乎没有提供解决方案,而且我的解决方案似乎过于复杂。

要求是选项卡式界面,其中每个选项卡可以是许多不同设计中的一种。每个设计都实现为TFrame。

由于正在设计的应用程序的性质,我们可能在任何特定时刻打开任何框架的多个副本(每个选项卡的内容不同,但不是设计),以便用户可以比较2的详细信息/ 3个不同的项目同时。

例如,在一个会话中,我们可能打开3个选项卡,所有框架设计A. 在另一种情况下,我们可能会打开3个选项卡,分别打开A,B和C框架。

设计需要足够灵活,以便我们可以根据要求将框架添加到设计中。

目前我的解决方案是让单独的TList管理我们打开的每种类型的Frame,可能还有一个主TList来跟踪打开的标签。正如我所说,过于复杂。

有没有人建议如何更简单地处理这个问题?

3 个答案:

答案 0 :(得分:1)

我可能会遗漏帧实例的主TList。

如果您需要它们,您可以通过直接询问TPageControl或通过每个TList的每个帧类型来获取它们。

除此之外,你的方法听起来很合理。

答案 1 :(得分:1)

我有一个应用程序,它使用我自己的菜单控件管理单个面板上的帧,以控制哪个帧可见。当我需要使一个框架可见时,我简单地为面板上的每一帧设置visible:= false,除了我想要的那个。我控制着面板上的内容,所以我知道每个控件至少是一个Tframe,我可以通过迭代Panel的Controls属性来到达每一帧。然后我使用接口在我的主窗体和框架之间进行通信。

现在,如果您想使用标准的Windows选项卡界面,您仍然可以按照建议使用页面控件,您知道每个TtabSheet上都有一个Tframe,您可以检查它的类型并根据需要使用它。我不明白为什么你需要一个Tlist,因为如果你真的需要进入“Tframe列表”,你可以通过迭代页面控件中的TtabSheets来动态地构建它。

另一种与我的第一种方法类似的方法,但是获得不错的Windows选项卡,将使用TtabControl而不是TpageControl。使用TtabControl,您基本上只需要一个代表所有选项卡的Tstrings实例(在Tabs属性中)。由于它是一个Tstrings,你可以将一个对象(即你的Tframe)与每个项目相关联,从而将每个标签关联起来。单击选项卡时,隐藏所有内容并显示正确的Tframe。您还有列表,因为它通过Tabs属性附加到TtabControl。您只需自己处理帧的可见性。

答案 2 :(得分:0)

我们使用TPageControl并创建运行时TTabSheet后代,它为我们自己的TFrame提供了一个新属性(我们不需要扫描.Controls或.Components来每次搜索我们的帧)。