首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Delphi将项目添加到ComboBox速度

Delphi将项目添加到ComboBox速度
EN

Stack Overflow用户
提问于 2009-03-20 21:23:13
回答 6查看 28.7K关注 0票数 8

我有一个相当复杂和大型的应用程序,它负责加载和加载数据。有没有一种快速的方法可以将项目添加到ComboBox中,而不需要花费太长的时间?在我的P3 3.2 the上,下面的代码片段只用了不到一秒钟的时间就添加了大约32,000个条目。(MasterCIList是一个StringList,其字符串长度通常为20 - 30个字节)。

with LookupComboBox do
 begin
  Items.BeginUpdate;
  Items.Clear;
  for i := 0 to MasterCIList.Count - 1 do
   Items.Add(MasterCIList[i]);
  Items.EndUpdate;
 end;

深入到VCL,看起来在TComboBoxStrings.Add中,有一个调用

Result := SendMessage(ComboBox.Handle, CB_ADDSTRING, 0, Longint(PChar(S)));

我猜这真的很占用时间(好吧,我知道是这样)。有没有其他更快填充项目的方法?有没有高速组合盒?我有TMS组件,但它们似乎是TComboBox的扩展。

例如,我有一个似乎完全重写了TMemo的PlusMemo。我可以很容易地在一秒钟内向PlusMemo添加一百万行代码。一个TMemo,我不这么认为。

非常感谢您的宝贵时间!

EN

回答 6

Stack Overflow用户

发布于 2009-03-20 21:35:09

如果我是个麻烦的人,我很抱歉,但我怀疑一个有32,000个项目的TComboBox甚至根本不是“可用的”-我想说它慢的原因是:它从来没有打算这样做:)

有没有可能过滤数据,只加载子集?更具体地说,在我一直在开发的一个特定数据库应用程序中,用户可以搜索一个人。我们让用户输入至少3或4个字符的名称,然后才开始在列表框中返回结果。这大大增加了搜索表单的可用性,也大大加快了整个过程。

你能遵循类似的方法吗?

或者,从完全不同的角度来看,也许您可以看看VirtualTreeView组件-或者直接使用,或者从中获得灵感。

票数 17
EN

Stack Overflow用户

发布于 2009-03-21 01:29:15

我同意在一个组合盒里有3万2千个项目是一个荒谬的数量...也就是说,您可以先尝试将项添加到TStringList中,然后结合使用Begin/EndUpdate和AddStrings:

SL := TStringList.Create;
try
  // Add your items to the stringlist
  ComboBox.Items.BeginUpdate;
  try
    ComboBox.Items.AddStrings(YourStringList);
  finally
    ComboBox.Items.EndUpdate;
  end;
finally
  SL.Free;
end;

代码可以编译,但我没有进一步测试它;我从来没有觉得有必要向组合框或列表框添加几十个以上的项。如果需要更多的条目,我会找到一种方法在填充列表之前进行过滤,这样条目就会更少。

只是出于好奇,你怎么能期望用户在这么多项目中进行排序来做出决定呢?

票数 3
EN

Stack Overflow用户

发布于 2013-12-07 08:01:30

var
  Buffer: TStringList;
begin
  Buffer := TStringList.Create;

  try
    // --> Add items to Buffer here <--

    ComboBox.Items := Buffer;
  finally
    FreeAndNil(Buffer);
  end;
end;

这是我们发现的更新视觉控件的最快方法。

VCL在内部执行BeginUpdate、Clear和EndUpdate。

如果你不相信我,那就分析一下吧。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/668054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档