输入时如何填充 ComboBox?

Posted

技术标签:

【中文标题】输入时如何填充 ComboBox?【英文标题】:How to fill ComboBox while you are typing in it? 【发布时间】:2018-10-13 07:28:32 【问题描述】:

我正在尝试在您输入 TComboBox 时完成搜索,并在我输入时自动添加项目。

我使用 Delphi 7 和 MSSQL。

假设我有一张长表,其中包含一列名为“names”的表中的姓名列表,我输入了“Jonathan”。

我想在我一一输入时将结果输入TComboBox

谢谢。

【问题讨论】:

你看过 TDBLookUpComboBox 吗? 你在哪里输入的?在TComboBox?或者您输入其他组件并希望 ComboBox 项目填充数据? 我在 TCombobox 更改事件上键入代码,因此当用户向数据库键入新查询时,会加载与组合框匹配的名称。我的问题是组合框的行为很奇怪,添加到我不需要的现有项目,或者当我清除项目并添加新项目时它失去焦点,或者当我输入 123 时它转到 321。 @StarDust 看看我的回答 【参考方案1】:

尝试以下方法:

procedure TForm1.ComboBox1Change(Sender: TObject);
var
  I: Integer;
begin
  ComboBox1.Items.Clear;
  ComboBox1.SelStart:= Length(ComboBox1.Text); //To put the cursor in the end
                                                 of the string typed in the ComboBox
  if ComboBox1.Text = '' then
    ADOTable1.Filtered:= False
      else
        begin
          ADOTable1.Filter:= 'Names LIKE ' + QuotedStr(ComboBox1.Text + '*');
          ADOTable1.Filtered:= True;
          for I := 1 to ADOTable1.RecordCount do
            begin
              ADOTable1.RecNo:= I;
              ComboBox1.Items.Add(ADOTable1.FieldByName('Names').Value);
            end;
        end;
end;

【讨论】:

您能否添加一个带有 TADO QUERY 组件的示例?我会在家里试试这个,我会告诉你的。 @StarDust 你可以用TADOQuery做同样的事情 谢谢,我修改了一点你的逻辑,它工作正常。但是,当我快速键入时,我会出现某种滞后行为,或者当我从中间删除某些内容时,它会回到最后。在我开始输入并等待半秒后,有什么办法可以让代码有一点延迟? @StarDust 你的意思是Sleep()?

以上是关于输入时如何填充 ComboBox?的主要内容,如果未能解决你的问题,请参考以下文章

PowerShell ComboBox回显填充列表

ArrayList 由用户输入填充到 ComboBox(选择 JPS)

如何在另一个类中填充来自foreach的Combobox

C# Combobox (Dropdownstyle = Simple) -- 如何在键入时选择项目

如何禁用 ComboBox 中第一项的自动选择?

python中如何调整ComboBox宽度