我有一个来自DevExpress的TdxfCustomComboBox的自定义组合框.它在大多数情况下都能正常工作……然后我收到了客户的报告,当他们尝试打开它时,弹出窗口需要3秒钟.经过一些调查后,我发现这是
这意味着包含此行的StdCtrls.TListBoxStrings.Add被调用12000次,每个字符串一次.
SendMessage(ListBox.Handle,LB_ADDSTRING,0,Longint(PChar(S)));
处理这一行需要通过多层消息处理程序进行多次访问,这真的让事情陷入困境.我发现这种愚蠢,因为无论如何,实际上只有十几个项目实际显示在弹出窗口中.有没有人知道一个组合框控件,不需要这种预加载,可以扩展?
编辑:不幸的是,它不能加载12,000项不是一个选项.组合框中的项目数基于数据库中的项目数,并且它们都必须可用.也没有将它变成组合框以外的东西.没有足够的屏幕空间.
我能想到的最佳解决方案是使用TButtonEdit,当你点击按钮时,TVirtualStringTree(闪电般快速)会弹出包含这些项目,每当用户点击一个项目时,弹出窗口将关闭,所选项目将是显示在TButtonEdit的文本属性中 – 这可以在几分钟内完成(5-10)