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