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

use*_*120 7 delphi user-interface vcl custom-component

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

Joh*_*mas 1

  1. 使用 TTimer(我们称之为 timIncSearch)。设置(在设计时)以下属性:Enabled:=False;
    间隔:=400;//根据经验发现-这是Windows资源管理器中使用的延迟

...在 OnTimer 中您将编写您的搜索引擎。确保这里的第一行是 timIncSearch.Enabled:=False; 另外,因为您使用 csOwnerDrawFixed ,所以最好强制重新绘制控件。

顺便说一句, - 只是猜测,因为您没有给我们提供很多详细信息 - 也许您必须挂钩 OnEnter 和 OnExit 事件来自定义打开和关闭下拉列表。(通常,这是通过相应设置 AutoDropDown 属性来实现的)

  1. 在你的 ComboBox.KeyPress 中你会写

with timIncSearch do
begin
Enabled:=False;
Enabled:=True;
end;

...这里还要注意,也许您必须有一个“case Key of”构造来单独处理#13(或其他)。

其他提示:

  • 根据您的情况,也许您必须挂钩(也?)OnKeyDown(如果您想处理特殊键,例如 BackSpace、Del、Arrows 等 -考虑到按下该键时该事件会重复自身)并且/或 OnKeyUp (如果您想进行与上述类似的处理,但考虑键盘的按键自动重复功能)。