如何遍历delphi 2010中的记录字段?

时间:2011-02-21 16:03:07

标签: delphi

我想将记录的字段读取到字符串列表或编辑控件数组。我的代码是错误的,请修复它;以及如何编写遍历字段。

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.

1 个答案:

答案 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;