可以快速打开大量项目的组合框

Mas*_*ler 3 delphi controls

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

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

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

处理这一行需要通过多层消息处理程序进行多次访问,这真的让事情陷入困境.我发现这种愚蠢,因为无论如何,实际上只有十几个项目实际显示在弹出窗口中.有没有人知道一个组合框控件,不需要这种预加载,可以扩展?

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

Com*_*sNo 7

我能想到的最佳解决方案是使用TButtonEdit,当你点击按钮时,TVirtualStringTree(闪电般快速)会弹出包含这些项目,每当用户点击一个项目时,弹出窗口将关闭,所选项目将是显示在TButtonEdit的文本属性中 - 这可以在几分钟内完成(5-10)

  • +1.这个或其变体是处理那些疯狂数据量的唯一方法.确保弹出的东西也具有一些"搜索"功能.无论用户今天想什么,一个包含12k项目的组合框都无法使用 - 因为您知道用户明天会改变它的想法! (3认同)