VirtualStringTree 可以避免将数据附加到节点吗?
Can VirtualStringTree avoid attaching data to a Node?
我见过的示例中的标准 VirtualStringTree 有一个 GetText 过程来获取通过 InitNode 存储在内存中的数据。它使用一组节点来管理显示、排序等。
在其自身 class (TMyDataClass) 中收集和管理一些数据但使用 VirtualStringTree 只是为了显示它的应用程序可以简单地在 GetText 中访问 TMyDataClass 的数据,而无需费心将该数据附加到InitNode 中的节点(随后在 FreeNode 中释放它)。
我正在尝试了解这样做的任何缺点。如果我不使用 InitNode 和 FreeNode,我会错过 VirtualStringTree 的哪些功能?我当然不反对那些,但我只是想更好地理解。
TVirtualStringTree 用于处理与显示相关的元素,无需担心数据实际是什么。
为了让它做到这一点,每个节点记录都可以存储额外的信息以获取它需要知道的数据。 Data
属性。一般来说,您不希望拥有数据的多个副本,因此在节点的 Data
属性 中,您将存储一个指向对象的指针(引用),它可以从中获取数据。我知道数据 属性 被定义为一条记录 - 因此您需要定义一条记录来保存您的数据。 (请注意,我可能指的是与您使用的版本不同的版本 - 检查您的文档或源代码以确认您需要什么)。
这意味着你有,例如:
CellText := TMyNodeRecord(Node.Data).AppData.DisplayText;
其中 TMyNodeRecord 定义如下:
type TMyNodeRecord = record
AppData: TMyDataClass;
end;
其中 TMyDataClass
是您自己的数据对象,它通过 DisplayText 属性(或您喜欢的任何其他 属性 / 方法)提供文本。
我见过的示例中的标准 VirtualStringTree 有一个 GetText 过程来获取通过 InitNode 存储在内存中的数据。它使用一组节点来管理显示、排序等。
在其自身 class (TMyDataClass) 中收集和管理一些数据但使用 VirtualStringTree 只是为了显示它的应用程序可以简单地在 GetText 中访问 TMyDataClass 的数据,而无需费心将该数据附加到InitNode 中的节点(随后在 FreeNode 中释放它)。
我正在尝试了解这样做的任何缺点。如果我不使用 InitNode 和 FreeNode,我会错过 VirtualStringTree 的哪些功能?我当然不反对那些,但我只是想更好地理解。
TVirtualStringTree 用于处理与显示相关的元素,无需担心数据实际是什么。
为了让它做到这一点,每个节点记录都可以存储额外的信息以获取它需要知道的数据。 Data
属性。一般来说,您不希望拥有数据的多个副本,因此在节点的 Data
属性 中,您将存储一个指向对象的指针(引用),它可以从中获取数据。我知道数据 属性 被定义为一条记录 - 因此您需要定义一条记录来保存您的数据。 (请注意,我可能指的是与您使用的版本不同的版本 - 检查您的文档或源代码以确认您需要什么)。
这意味着你有,例如:
CellText := TMyNodeRecord(Node.Data).AppData.DisplayText;
其中 TMyNodeRecord 定义如下:
type TMyNodeRecord = record
AppData: TMyDataClass;
end;
其中 TMyDataClass
是您自己的数据对象,它通过 DisplayText 属性(或您喜欢的任何其他 属性 / 方法)提供文本。