2011-01-20 61 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每次搜索框架)。