TVirtualStringTree每个单元格均显示"node"错误,如何正确展示绑定数据?
问题原因
TVirtualStringTree 是虚拟渲染模式的控件,你当前仅完成了节点创建、数据绑定的逻辑,没有实现控件的OnGetText回调事件,控件无法感知需要读取你自定义记录里的哪个字段渲染到单元格,就会输出默认占位文本node。
修复步骤
- 先确认窗体初始化阶段已配置节点数据占用空间(如果没加要补上,否则节点数据存储会异常):
procedure TForm2.FormCreate(Sender: TObject); begin vsTree1.NodeDataSize := SizeOf(TRecFileDirectory); // 其他初始化逻辑 end;
- 给
vsTree1控件添加OnGetText事件,实现单元格文本读取逻辑:
procedure TForm2.vsTree1GetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); var ptrFileDir: TPRecFileDirectory; begin ptrFileDir := Sender.GetNodeData(Node); // 根据你的列配置调整分支逻辑,以下是示例 case Column of 0: CellText := ptrFileDir^.FileDirectory; // 首列显示目录路径 1: CellText := BoolToStr(ptrFileDir^.FileDirectoryLock, True); // 第二列显示锁定状态 end; end;
补充注意事项
- 如果需要展示多列,要提前在控件的
Columns属性里添加对应数量的列配置 - 确认
arrFileDirectory数组在执行btn4Click前已经完成赋值,没有空数据的情况
内容的提问来源于stack exchange,提问作者Ajay Patnaik
相关产品推荐
相关产品推荐

