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;
// 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;
var
List : TStringList;
I : integer;
begin
try
List:=TStringList.Create;
try
List.AddObject('Item 1', TObject(332));
List.AddObject('Item 2', TObject(345));
List.AddObject('Item 3', TObject(644));
List.AddObject('Item 4', TObject(894));
for I := 0 to List.Count-1 do
Writeln(Format('The item %d contains the string "%s" and the integer value %d',[I, List[I], Integer(List.Objects[i])]));
finally
List.Free;
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
stringlist.AddObject('apple', TFruit.Create);
stringlist.AddObject('banana', TFruit.Create);
i := stringlist.IndexOf('apple');
if i >= 0 then
myfruit := stringlist.Objects[i] as TFruit;
3条答案
按热度按时间ygya80vv1#
它添加了一对项目:
TStringList.Strings
列表中的条目,以及TStringList.Objects
列表中的匹配TObject
。例如,这允许您存储一个字符串列表,这些字符串提供了项的名称和一个对象,该对象是包含匹配项的类。
这显然是一个人为的例子,因为它不是你真正觉得有用的东西。但它展示了这个概念。
另一个方便的用途是存储一个整数值沿着一个字符串(例如,显示
TComboBox
或TListBox
中的项目列表和相应的ID,以用于数据库查询)。在这种情况下,您只需要在Objects
数组中类型转换整数(或其他任何SizeOf(指针))。如果存储的不是实际的
TObject
,则不需要释放内容。因为它们不是真实的对象,所以除了TStringList
本身没有什么可以释放的。3hvapo4f2#
AddObject
方法允许您存储与Item属性中存储的字符串相关联的TObject地址(指针)。Objects
属性用于访问存储的对象。检查这个使用
AddObject
存储与每个字符串关联的整数值的简单示例。6rvt4ljy3#
TStringList不仅仅是一个字符串列表。
它可以用于名称值对:
但它也可以用来将字符串与任何对象(或任何指针)相关联。
TList是存储指针的列表。它们不与字符串相关联。