Delphi TStringList的使用

原文为Delphi自带的帮助文档。


继承关系:

TStringList <----------TStrings <----------------- TPresistent <------------TObject

描述:

使用一个字符串列表类来存储和操作一系列的字符串。TStringList实现继承自TStrings的抽象属性和方法,并且引进新的属性,事件和方法来实现下列功能:

1.排序列表上的字符串

2.阻止在已排好序的列表上出现重复的字符串

3.对列表上的内容的变化做出回应

4.控制字符串在列表上的位置、排序和识别是大小写敏感还是不敏感


属性:

自身设置的属性:

1.Capacity

表明在列表上的所有字符串占据多大的内存。

使用Capacity来显示列表上的所有的字符串占有多大的内存空间,或者重新分配内存以允许更多或更少的字符串被存储。

Capacity显示的是列表的入口被指派了多少数量,这不同于标志列表上有多少字符串的属性Count,但是,Capacity总是大于或等于Count。

向列表中添加新的字符串在必要时将导致Capacity增加,但设置Capacity不会改变Count。当显示设置Capacity时,不要将它小于Count,否则列表将会被截断,Count指示的值将大于列表实际存储的字符串数量,并且被截断的列表所占的内存不会被释放。

2.CaseSensitive

控制字符串在列表上的位置、排列和识别是大小写敏感还是不敏感

当为true时,表示大小写敏感,为false表示大小写不敏感。

3.Count

指示列表上字符串的数量

使用Count来遍历列表上所有的字符串,或者确定一个字符串相对于列表上最后一个字符串的位置。

4.Duplicates

指定重复的字符串是否能够添加到排好序的列表中

这个属性具有以下三个值:

dupIgnore: 忽略这个企图(即不允许重复的字符串添加到排好序的列表中)

dupError: 对这个企图报错

dupAccept: 接收这个企图(即允许重复的字符串添加到排好序的列表中)

注意:当列表没排序时,Duplicates是不起作用的。

5.Objects: Objects[index: integer]

列出一个与Strings属性中一个字符串相关联的对象

将一个对象和一个已经在列表中存在的字符串关联,这个对象和这个字符串具有相同的索引值index。查找与字符串关联的对象可以通过这个字符串的索引值。Index指明与对象关联的字符串的位置。使用indexof方法查找索引值对应的字符串。

注意:StringList对象并不拥有与字符串关联的对象,因此,如果StringList对象被销毁,与字符串关联的对象是仍然存在的。这些对象必须被显示的在应用程序中销毁。

6.Sorted

明确列表中的字符串是否自动排列

设置Sorted为True说明列表上的字符串按照升序自动排列。设置Sorted为false说明字符串的位置即是它在插入时所占据的位置。

当Sorted为false时,可以随时调用Sort方法以使字符串按照升序自动排列。

Sorted为True时,不能使用Insert方法将字符串添加到列表中,可以使用Add方法(这个方法将把新的字符串插到适当的位置)。当Sorted为false,使用Insert方法添加新字符串到列表的任意位置,或使用Add方法添加到列表尾

7.Strings: Strings[index: integer]

列出索引位置的字符串

使用Strings读取或修改处在绝对位置的字符串。当要确定具有显示值的字符串时使用Indexof方法

Strings是StringList的默认属性,因此下面的两个语句的意思是相同的:

MyStringList.Strings[0] := 'this is the first string';

MyStringList[0] := 'this is the first string';

继承自TStrings的属性

1.CommaText

2.DelimitedText

3.Delimiter

4.Names

5.QuoteChar

6.StringsAdapter

7.Text

8.Values

方法:

自身方法:

1.Add: Add(const S: string): integer; override;

添加一个新的字符串到列表

如果列表的属性Sorted为True,新的字符串将被添加到适当位置,如果属性Sorted为False,新的字符串将被添加到列表尾。返回的值是新字符串在列表上的位置。

注意:当Sorted属性为True时,添加一个列表中已存在的字符串将引发一个异常,并且属性Duplicates被设置成dupError。如果属性Duplicates事前被设置成dupIgnore,添加一个列表中已存在的字符串不会有任何改变,也不会有异常报出。

2.AddObject: AddObject(const S: string; AObject: TObject): integer; override;

添加一个字符串到列表中,并且将这个字符串与一个对象相关联。

注意:列表并不拥有通过这种方式添加的对象,如果列表被销毁,对象是仍然存在的。这些对象必须在程序中被显示销毁。

3.Clear

删除列表上所有的字符串。

4.CustomSort:

type TStringListSortCompare = function(List: TStringList; Index1, Index2: Integer): Integer;

CustomSort(Compare: TStringListSortCompare); virtual;

自定义列表的排列顺序

使用由Compare参数决定的排列规则排列列表。

从比较两个字符串的Compare函数获取一个返回值。

5.Delete

Delete(Index: Integer); override;

移除列表中索引值是Index的字符串。

6.Destroy

销毁一个列表的对象。

不要在程序中直接调用Destroy。使用Free。Free函数只有在列表的对象不为空时才调用Destroy。

Destroy释放列表中字符串占据的内存空间

7.Exchange

Exchange(Index1, Index2: Integer); override;

交换两个字符串在列表中的位置。

如果字符串关联了一个对象,那么这个对象的索引值也是交换了的。

警告:不要在有排序的列表中调用Exchange除非交换两个与不同的对象关联的同样的字符串。Exchange是不检查列表是否排序的,如果调用了,就会打乱排好序的列表的顺序。

8.Find: Find(const S: String; var Index: integer): boolean; virtual;

定位字符串在列表中的索引值,还可以指示字符串是否在列表中存在。如果字符串在列表存在,find返回True,Index指向索引值。如果不存在,find返回false。

注意:Find只能使用在已排序的列表中。对于未排序的列表,使用IndexOf;

9.IndexOf:IndexOf(const S: string): integer; override;

确定字符串在列表中的索引值。如果字符串在列表中存在,IndexOf返回的是字符串在列表中的索引值,如果不存在,返回-1。

10.Insert: insert(Index: integer; const S: string);override;

在指定的索引位置插入一个字符串。

如果字符串与一个对象关联,使用InsertObject

注意:如果列表是排序的,使用Insert或InsertObject会引发一个异常,可以使用Add或AddObject。

11.insertobject:insertObject(Index: integer; const S: string; AObject: TObject); override;

在指定位置插入一个字符串,同时将这个字符串与一个对象相关联。

12.Sort

按照升序排列列表中的字符串。

当CaseSensitive为False时,使用AnsiCompareStr排列字符串,当CaseSensitive为True时,使用AnsiCompareText排列字符串。

继承自TStrings

1.AddStrings

2.Append

3.Assign

4.BeginUpdate

5.EndUpdate

6.Equals

7.GetText

8.IndexOfName

9.IndexOfObject

10.LoadFromFile

11.LoadFromStream

12.Move

13.SaveToFile

14.SaveToStream

15.SetText

继承自TPresistent

1.GetNamePath

继承自TObject

1.AfterConstruction

2.BeforeDestruction

3.ClassInfo

4.ClassName

5.ClassNamels

6.ClassParent

7.ClassType

8.CleanupInstance

9.Create

10.DefaultHandle

11.Dispatch

12.FieldAddress

13.Free

14.FreeInstance

15.GetInterface

16.GetInterfaceEntry

17.GetInterfaceTable

18.InheritsFrom

19.InitInstance

20.InstanceSize

21.MethodAddress

22.MethodName

23.NewInstance

24.SafeCallException


事件:

OnChange

当列表上的字符串发生改变后立即触发。

写一个OnChange事件句柄

OnChanging

在列表上的字符串发生改变前触发。

为在列表上准备改变的字符串写一个OnChanging事件句柄。

不论在列表上的字符串是被添加、删除、移动或者改变,下面的事件都会触发:

1.在改变之前一个OnChanging事件发生

2.字符串被添加,删除,移动或修改

3.在改变之后一个OnChange事件发生

注意:上面的事件在列表上的每个改变都会发生,不管程序是否调用BeginUpdate和EndUpdate

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值