Firemonkey TTreeView - 在 TTreeViewItems、TValue 中存储对象引用
Firemonkey TTreeView - Storing object references in TTreeViewItems, TValue
尝试使用与旧 VCL 相同的方法 TTreeNode.
好的,没有 TTreeNode
并且没有方法将树节点添加到树中,我必须手动创建 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
方法是空的虚拟存根,必须在后代 classes 中覆盖它。你不能像你那样使用TreeViewItem.Data
,因为Data
实际上包含TTreeViewItem.Name
属性。
您必须创建自己的后代 TTreeViewItem
class 并使用它代替默认的
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;
尝试使用与旧 VCL 相同的方法 TTreeNode.
好的,没有 TTreeNode
并且没有方法将树节点添加到树中,我必须手动创建 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
方法是空的虚拟存根,必须在后代 classes 中覆盖它。你不能像你那样使用TreeViewItem.Data
,因为Data
实际上包含TTreeViewItem.Name
属性。
您必须创建自己的后代 TTreeViewItem
class 并使用它代替默认的
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;