属性 |
类型 |
描述 |
public: |
|
|
Duplicates |
Types::TDuplicates |
如果字符串列表在排序状态,即 Sorted 属性为 true 的状态,是否可以加入重复的字符串,可读写属性,默认值是 Types::dupIgnore,可以使用的值:
• Types::dupIgnore: 忽略,不加入字符串列表;
• Types::dupAccept: 接受,可以加入字符串列表;
• Types::dupError: 错误,抛出 EStringListError 异常。
是否区分大小写,根据 CaseSensitive 属性;需要先设 Duplicates 再添加字符串才有效。 |
Sorted |
bool |
是否自动排序,可读写属性。true: 自动排序,false: 不自动排序。
在排序状态,是否允许加入重复字符串,根据 Duplicates 属性。
调用 Sort 方法排序不会改变 Sorted 属性的值。 |
CaseSensitive |
bool |
是否区分大小写,可读写属性。true: 区分大小写,false: 不区分大小写。
这个属性影响查找和排序,以及在排序状态是否允许添加重复数据等。 |
OwnsObjects |
bool |
是否拥有加入的 objects,可读写属性,默认为 false。
false: 不拥有 objects,和字符串关联的 object 不会被自动销毁;
true: 拥有 object,和字符串关联的 object 会随字符串一起自动销毁,如果字符串被删除或清空字符串列表,关联的 object 也会随着销毁。请参考 Objects 属性。 |
TStrings:: |
|
从 TStrings 继承过来的 |
Count |
int |
字符串的个数,只读属性。
Strings 属性里面一共有 Count 个字符串,从 Strings[0] ~ Strings[Count-1] |
Strings |
UnicodeString
[int Index] |
字符串列表里面的第 Index 个字符串,可读写属性。
Strings 属性里面一共有 Count 个字符串,从 Strings[0] ~ Strings[Count-1]
把 Strings 属性里面的所有的字符串连接在一起成为一个完整的字符串,使用 Text 属性。 |
Text |
UnicodeString |
字符串列表里面所有的字符串连接起来,每个字符串之间都有一个换行符,就像一个文本文件的格式,可读写属性。换行符为 LineBreak 属性的字符串,默认为 L"\r\n"。给 Text 属性赋值,会把赋值的字符串用 LineBreak 属性分割为字符串列表,放在 Strings 属性里面。 |
LineBreak |
UnicodeString |
换行符,可读写属性,默认值为 L"\r\n",即回车 (U+0D) 和换行 (U+0A) 两个字符。请参考 Text 属性。 |
Delimiter |
WideChar |
用单个字符分割字符串的分割符,可读写属性。给 DelimitedText 属性赋值,会把赋值的字符串用 Delimiter 或空格,制表符等不可打印的字符等分割,由 StrictDelimiter 属性指定分割方式。与 LineBreak 不同的是:Delimiter 是以单个字符分割,LineBreak 是以字符串分割;Delimiter
分隔符之间的内容如果用引号 (由 QuoteChar 属性规定的字符) 引起来的字符串不被分割,LineBreak 不检查引号,只要发现分割符一律都分割。 |
QuoteChar |
WideChar |
引号字符,可读写属性,和 Delimiter 属性配合使用,分割符如果在引号里面,当作普通字符,不分割字符串。QuoteChar 默认值为双引号 L'"'。 |
StrictDelimiter |
bool |
严格使用 Delimiter 分割符,可读写属性。
true: 只使用 Delimiter 属性的字符分割给 DelimitedText 属性赋值的字符串。
false: Delimiter 属性、空格、制表符等不可打印的字符都会分割字符串。 |
DelimitedText |
UnicodeString |
用 Delimiter 分割符分割的字符串,可读写属性。必须先设定 Delimiter 和 StrictDelimiter 属性的值,然后再给 DelimitedText 赋值,会把赋值的字符串分割到 Strings 属性里面。 |
CommaText |
UnicodeString |
逗号分割的字符串,可读写属性。这个给属性赋值,始终使用逗号 L',' 作为分割符,使用双引号 L'"' 作为引号字符,相当于 Delimiter = L',' 并且 QuoteChar = L'"' 时的 DelimitedText。 |
Names |
UnicodeString
[int Index] |
如果字符串列表是成对的名字和值列表,Names[Index] 是第 Index 个名字,可读写属性。如果字符串列表的第 Index 项 Strings[Index] 不是一对名字和值 Names[Index] 是空字符串。名字和值请参考 NameValueSeparator 属性。 |
KeyNames |
UnicodeString
[int Index] |
如果字符串列表是成对的名字和值列表,Names[Index] 是第 Index 个名字,可读写属性。如果字符串列表的第 Index 项 Strings[Index] 不是一对名字和值 Names[Index] 是整个 Strings[Index] 字符串。名字和值请参考 NameValueSeparator 属性。 |
Values |
UnicodeString
[UnicodeString Name] |
如果字符串列表是成对的名字和值列表,Values[Name] 是名字为 Name 的项目的值,可读写属性。名字和值请参考 NameValueSeparator 属性。 |
ValueFromIndex |
UnicodeString
[int Index] |
如果字符串列表是成对的名字和值列表,ValueFromIndex[Index] 是第 Index 项的值,可读写属性。名字和值请参考 NameValueSeparator 属性。 |
NameValueSeparator |
WideChar |
名字和值之间的分割符,可读写属性,默认值为等于号 L'='。
字符串列表文字 (Text 属性) 是这样的结构:L"名字1=值1\r\n名字2=值2\r\n名字3=值3\r\n……";
字符串列表 (Strings 属性) 每一项就是一对名字和值:Strings[0] = L"名字1=值1"; Strings[1] = L"名字2=值2"; Strings[3] = L"名字3=值3"; ……,名字和值之间用 NameValueSeparator 分割。
Text 和 Strings 属性之间可以互相转化,由 LineBreak 分割每一对名字和值,默认为回车换行。 |
Objects |
TObject *
[int Index] |
字符串列表的每一项可以关联一个从 TObject 继承过来的类的对象,Objects[Index] 是第 Index 项关联的对象,可读写属性。
TStrings 不会自动维护每个 Objects 的分配和销毁,只是做字符串列表和对象之间的关联,
从 TStrings 继承的 TStringList 增加了 OwnsObjects 属性来设定是否自动维护 Objects。 |
Updating |
bool |
是否正在更新字符串列表,只读属性。
当改变 TStrings 的属性值的时候,会处于更新状态,Updating 属性为 true,更新完成,Updating 为 false。
可以调用 BeginUpdate 方法让 Updating 为 true,告诉相关程序代码这个字符串列表在处于更新状态,调用 EndUpdate 方法让 Updating 为 false。BeginUpdate 和 EndUpdate 必须成对出现,EndUpdate 和 EndUpdate 次数相等的时候,Updating 恢复 false 状态。BeginUpdate 和 EndUpdate 的内部计数器为 UpdateCount 属性,是 protected 访问权限的。
如果要更新字符串列表,例如 Memo 的 Lines 属性,先调用 BeginUpdate 使 Updating 属性为 true,可以防止在多次更新的过程中刷新显示,当更新完成之后,调用 EndUpdate 告诉字符串列表更新完成了,内部计数器归零,Updating 属性为 false,才会刷新显示。 |
Capacity |
int |
字符串列表的容量,可读写属性。
容量是最多能存放字符串的个数,而不等于实际上字符串的个数。就像一个瓶子,装满水的容量是
Capacity,而实际上只装了 Count 这些水,所以 Capacity ≥ Count。这样的分配内存的方法,可以减少分配内存的次数,加快字符串列表的处理速度。
TStrings 类没有实现 Capacity 的写操作,需要让子类来实现具体功能。 |
DefaultEncoding |
TEncoding |
默认编码,只读属性。请参考 Encoding 属性。
这个属性的默认值为 TEncoding::Default,在中国大陆,是代码页 936 (GBK 编码)。 |
Encoding |
TEncoding |
当前使用的编码,只读属性,
在从未调用过 LoadFromFile 或 LoadFromStream 的时候,这个属性值为 NULL;
调用 LoadFromFile 或 LoadFromStream 之后,Encoding 为自动判断文件的编码 (根据 BOM),如果无法判断文件的编码,会等于 DefaultEncoding 属性值。 |
StringsAdapter |
_di_IStringsAdapter |
IStringsAdapter 接口,可读写属性。为 OLE 应用使用,否则此属性为 NULL。
这个属性为 TStrings 内部使用的。
创建 StringsAdapter 可以使用 GetOleStrings 和 SetOleStrings。 |
WriteBOM |
bool |
把字符串列表存入文件或流,虽否储存 BOM,可读写属性,默认为 true。
这个属性影响 SaveToFile 和 SaveToStream 方法。 |
TrailingLineBreak |
bool |
最后一行末尾是否添加换行符 L"\r\n" (LineBreak 属性字符串),可读写属性,默认为 true。
请参考 LineBreak 属性。 |
UseLocale |
bool |
字符串比较大小的时候,是否使用本地语言规则,可读写属性,默认为 true。
true: 使用 AnsiCompareStr 和 AnsiCompareText,例如中国大陆,采用汉字读音的拼音顺序;
false: 使用 CompareStr 和 CompareText,使用 UNICODE 编码值的顺序,与地区习惯无关。 |
Options |
TStringsOptions |
字符串列表的选项,可读写属性,可以是以下表格里面的值的组合,也可以为空。
值 |
对应的属性 |
soStrictDelimiter |
StrictDelimiter |
soWriteBOM |
WriteBOM |
soTrailingLineBreak |
TrailingLineBreak |
soUseLocale |
UseLocale |
例如 StrictDelimiter 属性为 true,Options 里面会包含 soStrictDelimiter 值,反之亦然。
用 Options.Contains(el) 判断是否包含某个值,用 << 和 >> 添加和移除某个值,例如:
if(!sl->Options.Contains(soStrictDelimiter))
sl->Options = sl->Options << soStrictDelimiter; |
protected: |
|
|
TStrings:: |
|
从 TStrings 继承过来的 |
UpdateCount |
int |
BeginUpdate 和 EndUpdate 方法的内部计数,只读属性。
这个是 protected 访问权限的,仅供内部使用,详细说明请参考 Updating 属性。 |