在 Delphi 2007 中,我试图强制 TComboBox 下拉,但是当我这样做时,当控件正在编辑并且鼠标悬停在表单上时,鼠标光标会消失。在阅读了关于使用 TComboBox 实现过滤器功能的 SO答案后,我想到了这个想法。
展示行为。
- 运行下面的示例代码(到 2007 年可能需要时间机器)
- 单击组合框
- 开始打字。
在示例代码中,您可以看到我尝试过的两种解决方法,但都没有成功。
可以克服消失的光标吗?
一个替代的免费控件/组件也受到欢迎,它实现了在键入时过滤列表的相同目标。我需要根据项目中是否包含文本来过滤项目,因此自动完成路由似乎不是一个选项。
干杯,
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
ComboBox1: TComboBox;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure ComboChange(Sender: TObject);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.AutoComplete := false;
ComboBox1.Style := csDropDown;
ComboBox1.OnChange := ComboChange;
ComboBox1.Items.Add('One');
ComboBox1.Items.Add('Two');
ComboBox1.Items.Add('Three');
end;
procedure TForm1.ComboChange(Sender: TObject);
begin
{ First Try }
ComboBox1.DroppedDown := true;
{ Second Try }
//PostMessage((Sender as TComboBox).Handle, CB_SHOWDROPDOWN, 1, 0);
{ Grasping at straws }
//ShowCursor(true);
end;
end.