如何在TComboBox后代上键入时实现查找

时间:2008-10-01 22:45:22

标签: delphi user-interface vcl custom-component

在样式为csOwnerDrawFixed的TComboBox后代组件上实现“在键入时查找”行为的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

  1. 使用TTimer(我们称之为timIncSearch)。设置(在设计时)以下属性: 启用:= FALSE;
    间隔:= 400; //根据经验找到 - 这是Windows资源管理器中使用的延迟
  2. ...在OnTimer中你会写下你的搜索引擎。确保这里的第一行是timIncSearch.Enabled:= False;另外,因为你使用csOwnerDrawFixed,也许最好强制重新控制你的控件。

    顺便说一下, - 只是猜测,因为你没有给我们很多细节 - 也许你必须将OnEnter和OnExit事件挂钩到自定义打开并关闭DropDown列表。 (Normaly,这是通过相应地设置AutoDropDown属性来实现的)

    1. 在你的ComboBox.KeyPress中你会写
    2. with timIncSearch do
      begin
      Enabled:=False;
      Enabled:=True;
      end;

      ...在这里也要小心,也许你必须有一个'case Key of'构造来单独处理#13(或其他)。

      其他提示:

      • 根据你的情况,也许你必须挂钩(也是?)OnKeyDown(如果你想处理特殊的键,例如BackSpace,Del,Arrows等等。 - 考虑事件在按下键的同时重复自己和/或OnKeyUp(如果你想进行类似的处理,但没有考虑键盘的键自动重复功能)。

答案 1 :(得分:0)

首先,您需要决定是否需要“* my_string *”或“my_string *”功能,这意味着决定是在字符串内搜索还是从头开始搜索。 如果你想出来了,那么你必须修改在组合框中输入的所有单词的索引,并在每次击键后搜索它。 我不认为处理OnTimer是一种正确的方法。我宁愿使用“OnChange”或类似的东西。 您可以使用sorted(dupignore)TStringList执行此操作,也可以使用哈希表构建索引(实现取决于您)。 该体系结构取决于组合可以包含的最大字符串数。如果它是一个重要的数字,你可以使用哈希表(一个哈希Cardinal指向多个索引:数组,TList ...)