在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;
Run Code Online (Sandbox Code Playgroud)
这样安全吗?有任何警告或建议吗?
编辑:删除了MyStringList的声明,并将.Items添加到最后两个赋值行.
编辑2:尝试编译上面的内容,看起来我必须像这样抛出最后两行:
TStringList(CheckListBox1.Items).Sorted := TRUE;
TStringList(CheckListBox1.Items).Duplicates := dupIgnore;
Run Code Online (Sandbox Code Playgroud)
虽然我可以让它运行,但我问这个问题,因为只是让它运行并不意味着它总会运行或安全.
您无法控制TCheckListBox用于存储其项目的类.为Items属性分配值仅将其项目分配给内部存储.
另外,你不应该打电话Items.Free;.TCheckListBox取决于其内部实例TListBoxStrings.
要在你的问题中回答你的编辑:不要强迫Items财产TStringList.类型转换是错误的(暴露的实例Items不是a TStringList)并且只会导致问题.
编辑,为您似乎尝试实现的内容建议解决方法:要使checklistbox保持排序,您可以将其Sorted属性设置为True.为避免重复,您可以在代码中添加项目之前检查列表.
| 归档时间: |
|
| 查看次数: |
1016 次 |
| 最近记录: |