首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将记录与TListBox项关联?

如何将记录与TListBox项关联?
EN

Stack Overflow用户
提问于 2010-08-03 16:48:28
回答 2查看 7.5K关注 0票数 4

我有一种记录类型。我想在TListbox中添加该记录类型的变量,并在TListbox的单击事件中检索它。有可能吗?如果是,那么是如何实现的?

我用以下命令添加了它

代码语言:javascript
运行
复制
lstbox.AddItem(data,myrec);

它显示不兼容类型的错误。数据是字符串,myrec是我创建的MyRecord的变量。

用于添加:

代码语言:javascript
运行
复制
New(fptr1);
ZeroMemory(fptr1,sizeof(fptr1^));
fptr1^ := fptr^;
lstboxLeft.AddItem(path,TObject(fptr1));

对于检索:

代码语言:javascript
运行
复制
fptr := PData(lstboxLeft.Items[lstboxLeft.ItemIndex]);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-03 17:13:20

AddItem接受TObject作为第二个参数,并且记录不是对象。您可以将记录转换为TObject (通常是最好的解决方案),也可以将记录转换为对象。

下面是一个使用记录的工作示例:

代码语言:javascript
运行
复制
type
  PMyRec = ^TMyRec;
  TMyRec = record
    I : integer;
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
  P : PMyRec;
begin
  New(P);
  P.I := 42;
  ListBox1.AddItem('One',TObject(P));
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  I : integer;
begin
  //Free memory
  for I := 0 to ListBox1.Items.Count - 1 do
    Dispose(PMyRec(ListBox1.Items.Objects[I]));
end;

procedure TForm1.ListBox1Click(Sender: TObject);
var
  P : PMyRec;
begin
  P := PMyRec(ListBox1.Items.Objects[ ListBox1.ItemIndex ]);
  ShowMessage( IntToStr(P.I) );
end;
票数 13
EN

Stack Overflow用户

发布于 2010-08-03 17:14:26

代码语言:javascript
运行
复制
Type    
  PMyrec = ^MyRecord;
var
  MyRec : PMyRec;  
begin
  new(MyRec);
  //fill MyRec 
  lstbox.AddItem(data, TObject(myrec));

  //Dispose
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3394944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档