代码如下:
procedure TForm1.ComboBox1Change(Sender: TObject);
var
  i : integer;
  MyList : TstringList;
begin
  MyList := TStringList.Create;
  MyList.Clear;
  with ADOQuery1 do
  begin
    close;
    SQL.Clear;
    SQL.Add('Select * FROM providerInfo where Pname like '+''''+'%'+Trim(ComboBox1.Text)+'%'+'''');
    open;
  end;
  for i := 0 to adoquery1.RecordCount - 1 do
  begin
    MyList.Add(adoquery1.fieldbyname('Pname').AsString);
    adoquery1.Next;
  end;
  combobox1.Items := mylist;
end;procedure TForm1.ComboBox1Select(Sender: TObject);
begin
  combobox1.Text := combobox1.SelText;
end;
问题如下:1、当我输入‘河’字时,有关‘河’的字段会全部查询到,这个没有问题,
          2、我选中其中一条:比如是‘河北**机械厂',先按一下方向(左)建,但当我再按backspace键时,'厂'字删除掉了,可问题来了,光标自动到combobox1最左边,可能是由onchange事件引引起的,请问如何恢复到正常状态?
          3、当我输入某个关键字进行查询时,比如:’河北‘,我的combobox1输入框中却变成了’**机械厂‘, 这又是为何。(我用的万能五笔输入法。)

解决方案 »

  1.   

    1. 要靈活使用sql 模糊查詢 '%''百分號的使用;
    2. 可把combobox的DropDownListStyle的屬性設為isfixedlist或lsEditFixedList\lsEditList看下變更後的效果你就知道了;
    3. 一般都是用while把數據裝載到combobox中,再用lsEditList屬性,可輸入、可選擇(此時要注意onchange事件,關鍵字的即時變更會執行到此事件
      

  2.   

      很简单的小应用。
      不用每次combobox输入都查询,只需要第一次你装载数据进去就可以。
      你每次不都得搜索了?那多麻烦。
      

  3.   

    你查询和数据显示都用的combobox1,那肯定会有问题,你这种方法会把自己搞糊涂的
      

  4.   

    kye_jufei
    请问你用的哪个delphi 版本。我没有这些属性。我用的D7
      

  5.   

      combobox1.Items := Mylist;
    后面加上:
      ComboBox1.SelStart:= Length(ComboBox1.Text);  //光标移到文字的右方,不加则移到左方