VCL 和 FireMonkey 都无法存储ControlCollection
of a TGridPanel
/ TGridPanelLayout
当一个框架/表单被子类化或一个框架放置在另一个框架/表单上时,正确地执行此操作。
此错误适用于 VCL 和 FMX。早在 2011 年就已向旧 QC 报告过该问题,但从未得到修复(示例:#92298 https://web.archive.org/web/20140322052840/http://qc.embarcadero.com/wc/qcmain.aspx?d=92298, #123225 https://web.archive.org/web/20171220121227/http://qc.embarcadero.com/wc/qcmain.aspx?d=123225).
示例:删除一个TGridPanelLayout
with a TButton
在它的一个TFrame
:
object GridPanelLayout1: TGridPanelLayout
(...)
ControlCollection = <
item
Column = 0
ColumnSpan = 2
Control = Button1
Row = 0
RowSpan = 2
end>
object Button1: TButton
Align = Client
Size.Width = 421.000000000000000000
Size.Height = 257.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
Text = 'Button1'
end
end
当您稍后对框架进行子类化时,IDE 往往会为其从基类继承的组件存储大量冗余属性。通常在第一次按 F9 后,ColumnSpan
and RowSpan
属性被无缘无故地删除。在子类上,它看起来像这样:
inherited GridPanelLayout1: TGridPanelLayout
(...)
ControlCollection = <
item
Column = 0
Control = Button1
Row = 0
end>
inherited Button1: TButton
Size.Width = 210.500000000000000000
Size.Height = 128.500000000000000000
end
end
请注意 Size 属性的变化情况。另外,ControlCollection
项目被重新定义,但ColumnSpan
and RowSpan
属性完全缺失。这就是原因。
这个错误适用于您,因为在 FMX 中,特定平台的专用视图被实现为主视图 http://docwiki.embarcadero.com/RADStudio/en/Using_FireMonkey_Views.
版本控制系统有助于检测冗余属性何时潜入 DFM 文件中。在上面的例子中,完全删除是合法的inherited GridPanelLayout1
当你的子类不改变它时阻塞。此外,我建议您在不打开表单设计器窗口的情况下构建项目,因为它通常会损坏您的 DFM 文件并在每次机会时重新添加冗余属性。