我想将记录的字段读取到字符串列表或编辑控件数组。我的代码是错误的,请修复它;以及如何编写遍历字段。
type
TItem = record
a : string[20];
b : word;
c : word;
end;
var
Form1: TForm1;
implementation
uses rtti;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
rttiContext: TRttiContext;
rttiType: TRttiType;
fields: TArray<TRttiField>;
item: TItem;
i:word;
begin
item.a:='hello';
item.b:=123;
item.c:=456;
rttiType := rttiContext.GetType(TypeInfo(TItem));
fields := rttiType.GetFields;
for i := low(fields) to high(fields) do
begin
ShowMessage(fields[i].GetValue(@item).AsString);
end;
end;
end.
答案 0 :(得分:4)
我必须将string[20]
更改为string
(我不知道为什么,我不知道如何让它与string[20]
一起使用)。
并将AsString
更改为ToString
。这是在Delphi XE和Delphi 2010上测试的。
type
TItem = record
a : string;
b : word;
c : word;
end;
procedure TForm3.FormCreate(Sender: TObject);
var
rttiContext: TRttiContext;
rttiType: TRttiType;
fields: TArray<TRttiField>;
item: TItem;
i:word;
begin
item.a:='hello';
item.b:=123;
item.c:=456;
rttiType := rttiContext.GetType(TypeInfo(TItem));
fields := rttiType.GetFields;
for i := low(fields) to high(fields) do
begin
ShowMessage(fields[i].GetValue(@item).ToString);
end;
end;