Tstrings ,Tlist的创建问题(100分)

  • 主题发起人 主题发起人 Marlowe
  • 开始时间 开始时间
M

Marlowe

Unregistered / Unconfirmed
GUEST, unregistred user!
我在我的Form(TmyForm)的private部分加了a : Tstrings
然后在Form.create里加了,a.Create;
在程序中我用了a.add('XXXXXXX'),Delphi 报了一个读错误。
我该如何处理?
 
首先,不要直接用TStrings,应当用TStringList
其次,不能用a.create
应该是:
a:=TStringList.Create;
 
TStrings 是一个抽象类,它是其它类(如:Tmemo)的基类, 所以应使
用TStringList类.
 
创建短期字符串列表的基本步骤为:
  1. 构造字符串列表对象;
  2. 在try..finally块中使用列表;
  3. 在finally后释放列表空间。
  以下代码创建列表、使用列表、最后释放列表空间:

  procedure TForm1.Button1Click(Sender:Tobject);
var
TemList:TStrings;
begin
Templist:=TStringList.Create;
try
{ use the string list }
finally
Templist.Free;
end;
end;


长期字符串列表

  如果要在程序运行的任何时候使用字符串列表,则需在程序开始运行时就创建列表,并在程序终止前释放。
  运行时创建字符串列表的步骤为:
  1. 在程序主窗体对象的域中加入TStringsList类型的域;
  2. 在主窗体的OnCreate事件中创建句柄,该事件句柄在主窗体显示前运行;
  3. 在创建事件句柄后,创建字符串列表对象;
  4. 在主窗体的OnDestroy事件创建句柄,该事件句柄在主窗体消失之前运行。
  这样,在程序运行过程中,任何过程、事件均能访问该字符串列表。
  以下代码在程序中加入了一个Clicklist的字符串列表,用户每按一次鼠标键,程序往Clicklist中加入一字符串,程序结束前把该列表存入文件。

unit Unit1;

interface

uses WinTYpes, WinProcs, Classes, Graphics, Forms, Controls, Apps;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure FormMouseDown(Sender: TObject
Button: TMouseButton;
Shift: TShiftState
X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
ClickList: TStrings; {declare the field}
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
ClickList := TStringList.Create; {construct the list}
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ClickList.SaveToFile(ChangeFileExt(Application.ExeName, '.LOG'));
{save the list}
ClickList.Free; {destroy the list object}
end;

procedure TForm1.FormMouseDown(Sender: TObject
Button: TMouseButton;
Shift: TShiftState
X, Y: Integer);
begin
ClickList.Add(Format('Click at (%d, %d)', [X, Y])); {add a
string to the list}
end;

end.


千万别忘了free!
 
tqz,你在吓我!
 
tqz说的没错,只能用a:=TStringList.Create;
 
赶快给分呀!!!:-)
 
接受答案了.
 
WHY I HAVE NOT A POINT???????
 
后退
顶部