1

本文解释了如何在Delphi PageControl 中使用 TFrames 作为 TTabSheets 的替代品。

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

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

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

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

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

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

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

4

3 回答 3

1

我有一个应用程序,它使用我自己的菜单控件来管理单个面板上的框架,以控制哪个框架可见。当我需要使框架可见时,我只需为面板上的每个框架设置可见:=false,除了我想要的框架。我可以控制面板上的内容,因此我知道至少每个控件都是一个 Tframe,并且我可以通过遍历面板的 Controls 属性来访问每个帧。然后我使用接口在我的主窗体和我的框架之间进行通信。

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

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

于 2011-01-20T23:59:16.000 回答
1

我可能会省略框架实例的主 TList。

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

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

于 2011-01-20T20:19:23.527 回答
0

我们使用 TPageControl 并创建运行时 TTabSheet 后代,它具有我们自己的 TFrame 的新属性(我们不需要每次都扫描 .Controls 或 .Components 来搜索我们的框架)。

于 2011-01-21T08:17:23.580 回答