TCategoryPanel 到 TCategoryPanelGroup 的顺序

Order of TCategoryPanel into TCategoryPanelGroup

我得到了一个完整的 Delphi 应用程序,其中包含 32 种不同的数据输入形式。我有 1 个主要的 TCategoryPanelGroup,上面有 115 个不同的 TCategoryPanel。

我们在每个表单上找到了 6 个主要的 TCategoryPanel(main1,到 main6),我们向其中的每一个添加了一些特定的(特定的 1、2、3 等)TCategoryPanel。

所有表单都已在应用程序中预先构建,而不是在运行时构建。

这是我管理这些表格的方式(32 个表格,每个表格平均有 10 个信息面板)

然后用户可能会打开另一个不同的表单(来自 32),然后再次进行相同的过程。但不知何故,面板的顺序并不总是与我展示的顺序相同(可见真实)。

有时,specific1 面板出现在 main1 之前甚至 main6 之后。 第一个打开的窗体总是好的,打开和关闭不同的窗体后,所有面板命令都混在一起。

我花了一些时间在网上查看,试图了解 TCategoryPanelGroup 在显示和隐藏面板时管理面板顺序的方式,我需要帮助。

好吧,问题很简单,是否有不同的方法来管理 TCategoryPanelGroup 上的面板顺序以满足我的需要?我们可以简单地让它们可见而不是重新排列顺序吗?

到目前为止,我专注于这 2 个链接以获得类似但无法获得的链接:

http://www.devsuperpage.com/search/Articles.aspx?G=2&ArtID=92075 http://codeverge.com/embarcadero.delphi.vcl.using/order-of-tcategorypanels-on-tcat/1066818

My MCVE

Download it here

特定面板的数量:

测试 A:

  1. 打开表格 #1 {好的}
  2. 关闭它
  3. 打开表格 #3 {好的}
  4. 关闭它
  5. 打开表格 #1 {不行,因为从特定面板的最低 nb 开始还有 1 个面板打开}
  6. 关闭它
  7. 打开表格 #4 {好的}他现在是特定打开面板中 nb 最低的 2。
  8. 关闭它
  9. 打开表格 #3 {不好,因为有 3 个特定面板,现在打开的最低面板已降至 2}
  10. 关闭应用程序。

测试 B:

  1. 打开表格 #3 {好的}
  2. 关闭它
  3. 打开表格 #4 {好的,特定的最低 nb 现在是 2}
  4. 关闭它
  5. 打开表格 #3 {不好,因为有 3 个特定面板,现在打开的最低面板已降至 2}
  6. 关闭它
  7. 打开表格 #2 {好的,因为我们现在等于特定最低的 nb,即 2}
  8. 关闭它
  9. 打开表格 #3 {不行,因为有 3 个特定的面板,现在打开的最低面板是 2 个。这里我们有另一种情况,因为特定的 #2、#6 和 #4 现在混淆了,而且未重组}
  10. 关闭应用程序。

2 种不同的整体情况:未重新组合的特定面板和特定面板的顺序混淆。我什至在一个接一个地打开表单之前就明白发生了什么,但找不到解决它的方法。

好的,自己搞定

TCategoryPanelGroup 使用 TOP 属性 管理他的 TCategoryPanel 的顺序。

如果您总是以相同的顺序显示相同数量的面板,则以相反的顺序隐藏(可见:= false)它们并按顺序显示(可见:= true)它们可能会起作用。

我发现这个 post 与启发我的 TOP 属性 相关:How to reorder categories in TCategoryPanelGroup (Delphi XE)。在这个 post 中,解决方案是为第一个面板给出从 0 开始的准确 TOP 值,第二个等于第一个面板的高度值,依此类推。

我发现在显示所有面板之前给所有面板相同的 TOP 值会容易得多...注意,为了防止面板混乱,您需要提供一个 TOP 值大于您可以在TCategoryPanelGroup 面板折叠为 false。

因此,无论确切顺序如何,都隐藏所有面板并给它们 TOP 值 := 10000 现在已修复。

回顾:

  • 所有面板都是不可见的{无论您使它们不可见的顺序如何}。
  • 所有面板都获得相同的 TOP 值:= 10000; {大于最长形式的价值}
  • 按照从顶部到底部必须出现的确切顺序显示面板;

大功告成!

My MCVE with the solution included download it here