我有一个自定义的组合框,来自DevExpress的TdxfCustomComboBox。它在大多数情况下工作得非常好...然后我从客户那里得到一个报告,当他们试图打开它时,弹出窗口出现需要3秒。经过一番调查后,我发现这是因为他们的数据库中有大约12000个试图填充的项目,并且它会重新创建弹出窗口并每次填充它。可以快速打开很多项目的组合框
这意味着包含该行的StdCtrls.TListBoxStrings.Add
被称为12000+次,每个字符串一次。
SendMessage(ListBox.Handle, LB_ADDSTRING, 0, Longint(PChar(S)));
处理这一行需要通过消息处理程序的多层好几趟,真正停滞不前下来。我觉得这种愚蠢,因为只有大约十几个项目实际上一次显示在弹出窗口中。有谁知道组合框控件不需要这种预加载并可以缩放?
编辑:不幸的是,使它不加载12,000项不是一个选项在这里。组合框中的项目数量取决于数据库中的项目数量,它们都必须可用。它们都不是成为组合框之外的东西。没有足够的屏幕房地产。
**为什么**你想用一个装满** 12'000 **条目的组合框折磨你的顾客!?!?这是疯了.....你需要找到另一种方式向顾客展示这种选择... – 2010-12-22 20:20:59
它需要3 *分钟*我假设? – 2010-12-22 20:21:39
您是否尝试过调用BeginUpdate和EndUpdate? – ComputerSaysNo 2010-12-22 20:21:49