1
我正在编辑TVirtualStringTree中显示节点的第二列。但是,编辑完成后,我无法使用Sender.GetNodeData(Node)检索文本 - 它不包含文本。TVirtualStringTree:如何获取编辑的文本?
如何获取OnEdited事件中的文本?有没有其他的方式来获得编辑的文本?我已经阅读了Virtual Treeview CHM帮助文档的前几个常见问题解答页面,并且还提到了in this SO question的答案,但找不到答案。
这里是本次代码:
TTherapData = record
TherapID: Integer;
TherapName: String[120];
TherapInstr: String[120];
Selected: Byte;
end;
PTherapData = ^TTherapData;
procedure TfmPatient_Conslt.vstRxList_AsgEdited(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex);
var
TherapData: PTherapData;
begin
TherapData := Sender.GetNodeData(Node);
if Assigned(TherapData) then
begin
TherapData^.TherapInstr := vstRxList_Asg.Text[Node, 1];
showmessage(TherapData^.TherapInstr);
end;
FTherapDataListAsg_Iter := 0;
vstRxList_Asg.NodeDataSize := SizeOf(TTherapData);
vstRxList_Asg.RootNodeCount := 0;
vstRxList_Asg.RootNodeCount := TherapDataList_CountSelectedItems;
end;
@RobKennedy:要么有一个问题与回答或我的代码有问题,因为它没有按预期工作。 GetNodeData返回的指针指向的地址与树中存储的地址不同。我通过检查变量的地址(Debug-> Evaluate/Modify)来了解这一点。我该如何解决它?如果需要更多信息,我已准备好发布完整的代码,但它是一个非常长的单元。 – 2014-11-06 14:41:42
@RobKennedy:我注意到这个问题,因为我的数据库'save'例程不能'看到'对数据的更新(在编辑树中的单元格之后)。 – 2014-11-06 14:47:29
很抱歉听到这个消息。听起来像你需要重新修复你的答案。接受它显然是不成熟的。另一方面,我不确定你在这里举报的内容是否真的是你的答案的问题,或者是其他一些不相关的问题。做一些调试以缩小范围。 [正如我之前解释的,'GetNodeData'不一定会返回'Node.Data'](http://stackoverflow.com/a/26636017/33732)的实际地址,所以不要指望它。 – 2014-11-06 15:06:18