正在尝试与旧VCL TTreeNode.
相同的方法好吧,没有TTreeNode
,也没有方法将treenodes添加到树中,相反,我必须手动创建TTreeViewItem
实例并将其父属性设置为TTreeView
实例。现在,TTreeViewItem
具有数据属性,但类型为TValue
。
该如何处理?
我尝试了以下方法:
type
TMaster = class(TDevice)
...
end;
...
mstitem := TTreeViewItem.create(self);
mstitem.parent := TreeView1;
mstitem.data := TMaster.Create(i, 'master'+ inttostr(i));
...
procedure TForm1.TreeView1Click(Sender: TObject);
var
obj: TObject;
begin
selectednode := TTreeView1.Selected;
obj := TDevice(selectednode.Data.AsObject); //Invalid typecast
if obj is TDevice then
showmessage( TDevice(obj).DevName );
end;
最佳答案
TFmxObject.SetData
方法是空的虚拟存根,必须在子孙类中将其重写。您不能以TreeViewItem.Data
的方式使用它,因为Data
实际上包含TTreeViewItem.Name
属性。
您将必须创建自己的后代TTreeViewItem
类并使用它来代替默认类
TMyTreeViewItem = class(TTreeViewItem)
protected
fData: TValue;
function GetData: TValue; override;
procedure SetData(const Value: TValue); override;
end;
function TMyTreeViewItem.GetData: TValue;
begin
Result := fData;
end;
procedure TMyTreeViewItem.SetData(const Value: TValue);
begin
fData := Value;
end;
关于delphi - Firemonkey TTreeView-在TTreeViewItems,TValue中存储对象引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29122108/