gpt4 book ai didi

delphi - TStringList 的 addObject 方法

转载 作者:行者123 更新时间:2023-12-03 14:39:35 28 4
gpt4 key购买 nike

我想知道这个方法调用的作用:

stringList.addObject(String,Object);

我也想知道这个属性是做什么的:

stringList.Objects[i]

添加时看起来像键、值对。但是在循环检索时检索到了什么?

我还看到 items[i] 调用。

我对 TStringList 操作和 TList 操作感到困惑。

最佳答案

它添加了一对项目:TStringList.Strings 列表中的一个条目,以及 TStringList.Objects 列表中匹配的 TObject .

例如,这允许您存储提供项目名称的字符串列表,以及包含匹配项目的类的对象。

type
TPerson=class
FFirstName, FLastName: string;
FDOB: TDateTime;
FID: Integer;
private
function GetDOBAsString: string;
function GetFullName: string;
published
property FirstName: string read FFirstName write FFirstName;
property LastName: string read FLastName write FLastName;
property DOB: TDateTime read FDOB write FDOB;
property DOBString: string read GetDOBAsString;
property FullName: string read GetFullName;
property ID: Integer read FID write FID;
end;

implementation

{TPerson}
function TPerson.GetDOBAsString: string;
begin
Result := 'Unknown';
if FDOB <> 0 then
Result := DateToStr(FDOB);
end;

function TPerson.GetFullName: string;
begin
Result := FFirstName + ' ' + FLastName; // Or FLastName + ', ' + FFirstName
end;

var
PersonList: TStringList;
Person: TPerson;
i: Integer;
begin
PersonList := TStringList.Create;
try
for i := 0 to 9 do
begin
Person := TPerson.Create;
Person.FirstName := 'John';
Person.LastName := Format('Smith-%d', [i]); // Obviously, 'Smith-1' isn't a common last name.
Person.DOB := Date() - RandRange(1500, 3000); // Make up a date of birth
Person.ID := i;
PersonList.AddObject(Person.LastName, Person);
end;

// Find 'Smith-06'
i := PersonList.IndexOf('Smith-06');
if i > -1 then
begin
Person := TPerson(PersonList.Objects[i]);
ShowMessage(Format('Full Name: %s, ID: %d, DOB: %s',
[Person.FullName, Person.ID, Person.DOBString]));
end;
finally
for i := 0 to PersonList.Count - 1 do
PersonList.Objects[i].Free;
PersonList.Free;
end;

这显然是一个人为的示例,因为它并不是您真正有用的东西。不过,它演示了这个概念。

另一个方便的用途是存储整数值和字符串(例如,显示 TComboBoxTListBox 中的项目列表以及相应的使用 ID在数据库查询中)。在这种情况下,您只需在 Objects 数组中对整数(或任何其他 SizeOf(Pointer))进行类型转换。

// Assuming LBox is a TListBox on a form:
while not QryItems.Eof do
begin
LBox.Items.AddObject(QryItem.Fields[0].AsString, TObject(QryItem.Fields[1[.AsInteger));
QryItems.Next;
end;

// User makes selection from LBox
i := LBox.ItemIndex;
if i > -1 then
begin
ID := Integer(LBox.Items.Objects[i]);
QryDetails.ParamByName('ItemID').AsInteger := ID;
// Open query and get info.
end;

如果存储的内容不是实际的 TObject,则无需释放内容。由于它们不是真正的对象,因此除了 TStringList 本身之外,没有任何东西可以释放。

关于delphi - TStringList 的 addObject 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8947400/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com