我有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
被赋值了,但是它的所有数据都显示了不可访问的值......有人能解释一下这段代码有什么问题吗?
1条答案
按热度按时间6rqinv9w1#
尝试使用
Tree.NodeParent[RootNod];
而不是RootNod.Parent
,对于树的根节点,它的Parent
是树本身,所以它是“Assigned”的,但它不是PVirtualNode