【发布时间】:2018-02-21 02:50:13
【问题描述】:
需要在 TComboBox 中添加许多项目(超过 10k)(我知道 TComboBox 不应该包含许多项目,但我不能更改它)而不添加重复项。 所以我需要在添加之前搜索完整列表。我想避免使用 TComboBox.items.indexof,因为我需要二进制搜索,但二进制查找在 TStrings 中不可用。
所以我创建了一个临时的 Tstringlist,将 sorted 设置为 true 并使用 find。但现在将临时 Tstringlist 分配回 TComboBox.Items
(myCB.Items.AddStrings(myList))
真的很慢,因为它会复制整个列表。有没有办法移动列表而不是复制它?或者任何其他有效填充我的 TComboBox 的方法?
【问题讨论】:
-
只要解决根本问题。组合框中的 10k 个项目是荒谬的。什么版本的delphi?
-
@TomBrunberg Assign 甚至比 AddStrings 还要慢
-
主要问题是组合框的项目数量不合理。对于 10k 个项目,我认为半秒并没有那么慢,很难让它更快。您应该使用只允许加载可见项目的组件,我认为 TComboBox 没有这样的功能。
-
听起来你将不得不放弃。你不会解决根本问题,所以游戏就结束了。
-
我现在无法尝试,但您可以检查发送
CB_INITSTORAGEmessage 是否有帮助。请注意,他们 (MSDN) 将 100 称为一个很大的数字,这表明 10,000 个项目的数量对于组合框来说确实过高。
标签: delphi combobox delphi-xe3