delphi - 可以快速打开并装有大量元素的组合盒

标签 delphi controls

我有一个源自 DevExpress 的 TdxfCustomComboBox 的自定义组合框。在大多数情况下它工作得非常好......然后我收到了客户的报告,当他们尝试打开它时,弹出窗口需要 3 秒才能出现。经过一番调查后,我发现这是因为他们的数据库有大约 12000 个要填充的项目,并且每次都会重新创建弹出窗口并填充它。

这意味着包含此行的 StdCtrls.TListBoxStrings.Add 被调用 12000 多次,每个字符串一次。

SendMessage(ListBox.Handle, LB_ADDSTRING, 0, Longint(PChar(S)));

处理这一行需要多次遍历多层消息处理程序,这确实会让事情陷入困境。我觉得这很愚蠢,因为无论如何,弹出窗口中实际上一次实际上只显示了大约十几个项目。有谁知道不需要这种预加载并且可以缩放的组合框控件?

编辑:不幸的是,这里不能选择不加载 12,000 个项目。组合框中的项目数基于数据库中的项目数,并且它们都必须可用。也不是把它变成组合框以外的东西。没有足够的屏幕空间。

最佳答案

我能想到的最好的解决方案是使用 TButtonEdit,当您单击按钮时,将弹出一个包含项目的 TVirtualStringTree(速度快如闪电),每当用户单击某个项目时,弹出窗口将关闭并选择项目将显示在 TButtonEdit 的文本属性中——这可以在几分钟内完成(5-10)

关于delphi - 可以快速打开并装有大量元素的组合盒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4513342/

相关文章:

JQuery Mobile 触发器 ('create' ) 命令不起作用

java - 如何在 Java 中设置 SourceDataLine 的音量

c# - 制作无闪烁动画 C# 自定义控件的最佳方法是什么?

安卓日历 "Grid of Dates"

delphi - 如何使 Delphi 在 hpp 文件中发出函数和过程定义?

delphi - 为什么我的运行时创建的组件没有出现在表单上?

delphi - 为什么不能更改方法的指针?

delphi - 基于TGraphicControl的对象容器

windows - 如何解决 TPrintDialog 不保存设置?

c# - 如何动态创建选项卡