【发布时间】:2012-06-12 08:40:01
【问题描述】:
在 Delphi 7 中,我使用的是 TCheckListBox。我希望它使用 TStringList 而不是 TStrings,因此我可以将 Duplicates 设置为 dupIgnore,并将 Sorted 设置为 TRUE。
我可以这样做吗:
Form1 = class(TObject
CheckListBox1: TCheckListBox; // created by the IDE
end;
procedure TForm1.FormCreate
begin
CheckListBox1.Items.Free;
CheckListBox1.Items := TStringList.Create;
CheckListBox1.Items.Sorted := TRUE;
CheckListBox1.Items.Duplicates := dupIgnore;
end;
这样安全吗?有什么注意事项或建议吗?
编辑:删除 MyStringList 的声明并将 .Items 添加到最后两个赋值行。
编辑 2:尝试编译上面的代码,看起来我必须像这样转换最后两行:
TStringList(CheckListBox1.Items).Sorted := TRUE;
TStringList(CheckListBox1.Items).Duplicates := dupIgnore;
虽然我也许可以让它运行,但我提出这个问题是因为让它运行并不意味着它会一直运行或安全。
【问题讨论】:
-
MyStringList的目的是什么? -
我删除了未使用的 MyStringList 声明。
-
我认为这不是一个好主意。由
TCheckListBox创建的TStrings实际上是"TListBoxStrings"类型,它覆盖了Put、Get 等方法。Sorted属性可以在不使用 TStringList 的情况下正常工作。 -
@kobik,
TListBoxStrings是什么?据我所知,TCheckListBox.Items被声明为TStrings -
是的,但它们在
constructor TCustomListBox.Create(AOwner: TComponent);中创建为FItems := TListBoxStrings.Create;