gpt4 book ai didi

delphi - 为什么 Delphi TTreeNodes 从根本上与 TCustomTreeView 绑定(bind)?

转载 作者:行者123 更新时间:2023-12-03 18:12:54 27 4
gpt4 key购买 nike

我正在尝试在内存中构建几个“树”,然后将其中一个分配给用户可以与之交互的 TTreeView 控件。但是,如果不传递指向现有 TTreeView 的指针,我就无法构造任何 TTreeNodes 对象。传入 NIL 会导致 AV。

两个问题:- TTreeNodes 和 TTreeViews 之间的这种“硬”链接的原因是什么,,解决问题的最佳方法是什么?

我可以看到的一些选项是:

  • 维护我自己的树形结构没有 ttreenodes 和动态根据需要构建 TTreeNode。
  • 拥有多个不可见的 TTreeView只是用来制作的元素TTreeNodes 的东西工作。

.. 但我没有权衡这些的利弊。

最佳答案

TTreeView 及其相关类中有很多代码来保持Delphi 对象和底层Windows 控件之间的链接同步。例如,当通过窗口消息直接添加节点时,Delphi 对象需要在您下次询问它有多少节点时反射(reflect)该更改。

TTreeView 是 Windows 控件的包装器,TTreeNodesTTreeNode 只是该包装器的一部分。它们实际上并没有实现控件所做的所有树操作。如果当前没有任何可用的 Windows 控件,则某些操作无效。

TTreeView 是一个可视化控件。如果您没有任何可视化的东西,那么它不适合您。如果您有多个树数据结构,并且您只想要一个树控件,那么每当您切换到不同的结构时,您将不得不销毁和重新创建树节点。该控件甚至没有提供暂时隐藏某些节点的方法。

您可能对 Mike Lischke's virtual tree control 感兴趣.在其预期用途中,您自己管理树数据结构;该控件只是一个可视化。它询问您每个节点有多少个子节点,然后在每次必须绘制该节点时询问您每个节点的文本是什么。它管理哪些节点被展开、选择、检查或可见,但您管理所有数据。是free and open-source .

关于delphi - 为什么 Delphi TTreeNodes 从根本上与 TCustomTreeView 绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1193314/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com