在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;

虽然我可能能够让它运行,但我问这个问题,因为只是让它运行并不意味着它总会运行或安全。

===============>>#1 票数:8 已采纳

您无法控制TCheckListBox用于存储其项目的类。 Items属性分配值只会将其项目分配给内部存储。

另外,你不应该叫Items.Free; TCheckListBox取决于其内部实例TListBoxStrings

要回答您的问题中的编辑:不要将Items属性强制转换为TStringList 类型转换是错误的( Items暴露的实例不是TStringList )并且只会导致问题。

编辑,为您似乎尝试实现的内容建议解决方法:要使checklistbox保持排序,您可以将其Sorted属性设置为True 为避免重复,您可以在代码中添加项目之前检查列表。

  ask by RobertFrank translate from so

未解决问题?本站智能推荐: