- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我需要查找 TTreeView
中的第一个节点时,我调用 TTreeNodes.GetFirstNode
。但是,我有时需要定位树中的最后一个节点,但没有相应的 TTreeNodes.GetLastNode
函数。
我不想使用 Items[Count-1]
,因为这会导致使用 Result := Result.GetNext
遍历整个树。当然,只有当 TreeView 有很多节点时,这才重要。我完全欣赏虚拟容器控件的优点,但我目前还不会切换到 Virtual TreeView。
到目前为止,我已经提出了以下内容:
function TTreeNodes.GetLastNode: TTreeNode;
var
Node: TTreeNode;
begin
Result := GetFirstNode;
if not Assigned(Result) then begin
exit;
end;
while True do begin
Node := Result.GetNextSibling;
if not Assigned(Node) then begin
Node := Result.GetFirstChild;
if not Assigned(Node) then begin
exit;
end;
end;
Result := Node;
end;
end;
任何人都可以:
编辑 1
我不愿意保留自己的节点缓存。直到最近我一直在这样做,但发现了一些难以跟踪的间歇性杀毒软件,我相信这一定是由于我的缓存不同步造成的。显然,一种解决方案是让我的缓存同步代码正常工作,但我讨厌缓存,因为当你出错时很难跟踪出现的错误。
最佳答案
虽然我不是一个非 Exit 纯粹主义者,但我认为,当在不使用 Exit 的情况下也能保持可读性不变时,人们可能会更喜欢这种选择。
所以这里是完全相同的代码,因为我认为您无法以任何其他方式(更快)到达结束节点,但没有 Exit 并且稍微更紧凑:
function TTreeNodes.GetLastNode: TTreeNode;
var
Node: TTreeNode;
begin
Node := GetFirstNode;
Result := Node;
if Result <> nil then
repeat
Result := Node;
if Node <> nil then
Node := Result.GetNextSibling;
if Node = nil then
Node := Result.GetFirstChild;
until Node = nil;
end;
关于delphi - 我应该如何为 TTreeNode 实现 GetLastNode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6257348/
TTreeNode 没有 Visible 属性,因此不存在明显的选项。有没有其他方法可以使 TTreeNode 及其所有子节点不可见?当然,我希望稍后能够使其再次可见。 这是使用 Delphi 200
当我需要查找 TTreeView 中的第一个节点时,我调用 TTreeNodes.GetFirstNode。但是,我有时需要定位树中的最后一个节点,但没有相应的 TTreeNodes.GetLastN
我正在编写一个 delphi 2009 应用程序,它在对接面板上使用 TTreeView。 我发现如果我对 TTreeNode 进行子类化,我可以在我的应用程序中进行很大的简化。它所在的 TreeVi
我希望通过将 TGUID 放入其中来使用 TTreeNode 的数据(指针)属性。有人知道如何实现这一目标吗? 这是代码的一部分,可能会帮助你们理解我想要做什么。 if Assigned(trNode
我在 TTreeView 对象中显示项目。当一个 Item 有子项时,控件会在图标旁边绘制一个 >(如果展开,则绘制一个向下的箭头)。 我想知道我是否可以告诉 Item 以某种方式绘制 >,即使还没有
我正在尝试在内存中构建几个“树”,然后将其中一个分配给用户可以与之交互的 TTreeView 控件。但是,如果不传递指向现有 TTreeView 的指针,我就无法构造任何 TTreeNodes 对象。
我是一名优秀的程序员,十分优秀!