gpt4 book ai didi

delphi - TCheckListBox 中的 TStrings 与 TStringList

转载 作者:行者123 更新时间:2023-12-03 15:45:29 25 4
gpt4 key购买 nike

在 Delphi 7 中,我使用 TCheckListBox。我希望它使用 TStringList 而不是 TStrings,因此我可以将重复项设置为 dupIgnore,并将排序设置为 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;

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

最佳答案

您无法控制 TCheckListBox 使用什么类来存储其项目。为 Items 属性分配值只会将其项目分配给内部存储。

此外,您不应调用 Items.Free;TCheckListBox 取决于其 TListBoxStrings 的内部实例。

要回答您对问题的编辑:也不要将 Items 属性硬转换为 TStringList。类型转换是错误的(Items 公开的实例不是 TStringList),只会导致问题。

编辑,为您似乎试图实现的目标提出解决方法:要保持复选框排序,您可以将其 Sorted 属性设置为 True。为了避免重复,您可以在代码中添加项目之前检查列表。

关于delphi - TCheckListBox 中的 TStrings 与 TStringList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8465752/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com