【发布时间】:2013-11-22 18:13:00
【问题描述】:
我想添加一个带有 TTreeViewItem 的 TList 和一个带有另一个自定义类 (TRoom) 的对象。在delphi 2007中,有一个指针类型的“数据”字段已被替换为此处的TValue,我不知道如何使用。我已经在互联网上搜索了一些说它暂时无法处理自定义类型。
除了制作一个 hack 类之外,有人可以设计一种方法来实现这一点吗?
例如,下面的表单代码应该可以正常运行:-
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes,
System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs,
FMX.TreeView, FMX.Layouts, FMX.Edit;
type
TRoom = class
ID : WORD;
Name : String;
end;
TForm1 = class(TForm)
TreeView1: TTreeView;
TreeViewItem1: TTreeViewItem;
Button1: TButton;
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.Button1Click(Sender: TObject);
var
List : TList;
begin
// Get The List From TreeViewItem1
// pani's Solution - List := TList ( TreeViewItem1.TagObject );
Edit1.Text := TRoom ( List.First ).Name;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Room : TRoom;
List : TList;
begin
List := TList.Create;
Room := TRoom.Create;
Room.ID := 5;
Room.Name := IntToStr ( 5 );
List.Add ( Room );
// Add The List To TreeViewItem1
// pani's Solution - TreeViewItem1.TagObject := List;
end;
end.
【问题讨论】:
-
TValue是变体类型,使用Data.AsObject -
不起作用,编译器错误“不兼容的类型...”没有类型转换和“无效类型转换”。
-
@JerryDodge 一个 hack 类禁用了控件上的样式,需要手动指定样式并要求更新。
-
您可以将其附加到 .TagObject 属性。
-
@UmairAhmed
Data不是你我想象的那样。TagObject会做你想做的事。很抱歉误导了你。
标签: delphi firemonkey-fm2