delphi TVirtualStringTree向节点文本添加特定序列码

wvmv3b1j  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(109)

我有TVirtualStringTree,当我试图修改它的文本作为下一个(代码+文本):
我创建了这个函数,它为此目的创建了测试节点:

function GetNodeCode(Tree: TVirtualStringTree; SelectedNode: PVirtualNode): String;
var
  RootNod, TestNode: PVirtualNode;
  Code: String;
  i, count: integer;
begin
  RootNod := SelectedNode;
  Result := '';
  Count := 0;
  if Assigned(RootNod) then
  begin
    TestNode := Tree.AddChild(RootNod);
    RootNod := TestNode;
    while Assigned(RootNod) do
    begin
      if RootNod.Index = 0 then
        Result := '1' + Result
      else
        Result := IntToStr(RootNod.Index + 1) + Result;
      RootNod := RootNod.Parent;
    end;
    Tree.DeleteNode(TestNode);
  end
  else
  begin
    RootNod := Tree.GetFirst;
    while Assigned(RootNod) do
    begin
      if not Assigned(RootNod.Parent) then
        Count := Count + 1;
      Result := IntToStr(Count + 1);
      RootNod := Tree.GetNext(RootNod);
    end;
  end;
end;

但是,当运行代码时,不知何故,它在此行中给出了访问违规(在循环中的第三个计数之后):

if RootNod.Index = 0 then

我注意到RootNod被赋值了,但是它的所有数据都显示了不可访问的值......有人能解释一下这段代码有什么问题吗?

6rqinv9w

6rqinv9w1#

尝试使用Tree.NodeParent[RootNod];而不是RootNod.Parent,对于树的根节点,它的Parent是树本身,所以它是“Assigned”的,但它不是PVirtualNode

相关问题