关于stringlist删除

sancaoping 2010-09-28 11:38:47
1.stringlist添加记录
New(Record);
Record^.Name := '1';
Record^.Unit := '克';
stringlist1.AddObject(Record^.Name,Pointer(Record));

2.现在需要删除stringlist中的记录应该怎么办?
以下这种方法不行!
stringlist1.Objects[3].Free;
stringlist1.Delete(3);

这个删除应该怎么做?
...全文
162 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ecjtu5208 2010-09-28
  • 打赏
  • 举报
回复
stringlist1.Objects[3].Free;这一句可以不要,
直接用stringlist1.delete(3);就好了。
肯定是可以的。
看是否删除成功的效果的话,你只需要用放一个MEMO上去,然后memo1.lines:=stringlist1;就可以知道是否删除成功了。
以下是我测试的代码

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

pw=^mm;

mm=record

name:string;
number:string;
end;

var
Form1: TForm1;
x:tstringlist;
w:pw;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
x:= tstringlist.Create;
x.Add('1111');
x.Add('2222');
memo1.Lines:=x;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
new(w);
w^.name:='test';
x.AddObject(w^.name, pointer(w));
memo1.Lines:=x;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
x.Delete(2);
memo1.Lines:=x;
end;

end.
ecjtu5208 2010-09-28
  • 打赏
  • 举报
回复
等等,我刚才试了一下,是可以的。我晕。
ecjtu5208 2010-09-28
  • 打赏
  • 举报
回复
stringlist1.Add('111')
stringlist1.Add('222')
stringlist1.Add('333')
stringlist1.Delete(2);
这样可以删除第三个。


关键是你用的是addobject,用stringlist1.Delete(3);是不行的。



mdejtod 2010-09-28
  • 打赏
  • 举报
回复
dispose(pointer(stringlist1.objects[3]));
stringlist1.delete(3);
sancaoping 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 mdejtod 的回复:]
dispose(pointer(stringlist1.objects[3]));
stringlist1.delete(3);
[/Quote]

这个方法可以
ecjtu5208 2010-09-28
  • 打赏
  • 举报
回复
总之理解错了,你要删除那个动态创建的record指针就用1楼的dispose.
ecjtu5208 2010-09-28
  • 打赏
  • 举报
回复
那我理解错了,你说的记录是指record?哦,我一般理解为结构,我还以为你说的记录是字符串的意思呢
ecjtu5208 2010-09-28
  • 打赏
  • 举报
回复
你是要删除里面的object?还是删除字符串呢?
sancaoping 2010-09-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ecjtu5208 的回复:]
stringlist1.Objects[3].Free;这一句可以不要,
直接用stringlist1.delete(3);就好了。
肯定是可以的。
看是否删除成功的效果的话,你只需要用放一个MEMO上去,然后memo1.lines:=stringlist1;就可以知道是否删除成功了。
以下是我测试的代码


Delphi(Pascal) code

un……
[/Quote]

你删除的是字符串,不是指针类型的
likeyrain 2010-09-28
  • 打赏
  • 举报
回复
dispose(pointer(stringlist1.objects[3]));
stringlist1.delete(3);
zhaodog 2010-09-28
  • 打赏
  • 举报
回复
1楼 正解

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧