gpt4 book ai didi

delphi - 在 Delphi 中高效填充组合框

转载 作者:行者123 更新时间:2023-12-03 15:18:17 24 4
gpt4 key购买 nike

需要在 TComboBox 中添加许多项目(超过 10k)(我知道 TComboBox 不应该容纳很多项目,但我不能改变这一点)而不添加重复项。所以我需要在添加之前搜索完整列表。我想避免 TComboBox.items.indexof,因为我需要二进制搜索,但二进制查找在 TStrings 中不可用。

所以我创建了一个临时的Tstringlist,将sorted设置为true并使用find。但现在将临时 Tstringlist 分配回 TComboBox.Items

(myCB.Items.AddStrings(myList)) 

真的很慢,因为它复制了整个列表。有没有办法移动列表而不是复制它?或者有任何其他方法可以有效地填充我的 TComboBox?

最佳答案

无法将列表“移动”到组合框中,因为组合框的存储属于内部 Windows 控件实现。它不知道有什么方法可以直接使用 Delphi TStringList 对象。它提供的只是一个将一项添加到列表中的命令,然后 TComboBox 使用该命令将字符串列表中的每项一项一项复制到系统控件中。避免将数千个项目复制到组合框中的唯一方法是完全避免该问题,例如使用不同类型的控件或减少需要添加的项目数量。

ListView 有一个“虚拟”模式,您只需告诉它应该有多少个项目,然后当它需要了解有关列表上可见内容的详细信息时,它就会回调到您的程序屏幕。不可见的项目不会占用 ListView 实现中的任何空间,因此您可以避免复制。然而,system combo boxes don't have a "virtual" mode 。您也许可以找到一些提供该功能的第三方控件。

减少需要放入组合框中的项目数量是下一个最佳选择,但只有您和您的同事拥有找出最佳方法所需的领域知识。

关于delphi - 在 Delphi 中高效填充组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46179805/

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