是否可以将记录存储在ListBox的Item.Object属性中?

fos*_*ilz 4 delphi listbox listboxitem

我有一个记录,我想为添加到列表框的每个项目存储.我是否需要让记录成为一个类来完成这个?

TServerRec = record
    ID: integer;
    DisplayName: string;
    Address: string;
    Port: integer;
end;

procedure TMainForm.PopuplateServers;
var
  server: TServerRec;
begin
  for server in FServerList do
  begin
    lbServers.AddObject(server.DisplayName, server);
  end;
end;
Run Code Online (Sandbox Code Playgroud)

Mas*_*ler 5

不,但是您可以通过一些类型转换来存储指向此记录的指针.但是,你进入动态记录指针分配,这可能有点令人头疼.为什么不将TServerRec变成对象?


RRU*_*RUZ 5

尝试声明你这样的结构

type    
PServerRec = ^TServerRec;
TServerRec = record
    ID: integer;
    DisplayName: string[255];
    Address: string[255];
    Port: integer;
end;

   //now filling your list of objects
    procedure TForm1.Button1Click(Sender: TObject);
    const
      Max=10;
    var
      FServerList : Array [1..Max] of PServerRec;
      server      : PServerRec;
      i           : Integer;
    begin
      for i := 1 to Max do
      begin
        new(server);
        server^.DisplayName:='Server '+IntToStr(i);
        FServerList[i]:=server;
      end;

      for server in FServerList do
      begin
        lbServers.Items.AddObject(server.DisplayName, TObject(server));
      end;
    end;

    //now to retrieve the info
    procedure TForm1.lbServersDblClick(Sender: TObject);
    var
       server      : TServerRec;
    begin
       server:=PServerRec(lbServers.Items.Objects[lbServers.ItemIndex])^;
       ShowMessage(server.DisplayName);
    end;
Run Code Online (Sandbox Code Playgroud)

不要忘记调用该 dispose函数来释放分配的每个对象的内存.