Delphi. Как изменить поведение ComboBox?
Здравствуйте!
Не могу добиться следующего поведения Combobox, список которого загружается автоматически из базы данных, по первым буквам в Combobox.
Задача:
- Набрать часть поисковой строки и нажать Enter 2 список автоматом заполняется из БД по запросу, удовлетворяющей частичному слову.
- Открывается список, оператор выбирает из списка нужную строку.
procedure TForm29.ComboBox1KeyPress(Sender: TObject; var Key: Char);
var i: integer;
begin
if ord(Key) = VK_RETURN then
begin
ComboBox1.DroppedDown:=FALSE;
ComboBox1.AutoCloseUp:=FALSE;
FDQuery1.Close;
FDQuery1.ParamByName('fam').AsString:= ComboBox1.Text;
FDQuery1.Prepare;
FDQuery1.Open;
ComboBox1.Items.Clear;
while not FDQuery1.Eof do begin
ComboBox1.Items.Add(FDQuery1.Fields.Fields[0].AsString);
FDQuery1.Next;
end;
FDQuery1.Close;
Combobox1.SetFocus;
ComboBox1.DroppedDown:=TRUE;
//SendMessage(ComboBox1.Handle, CB_SHOWDROPDOWN, WPARAM(true), 0);
end;
end;
Сейчас при выполнении первых двух условий, выбирается самый первый по списку и закрывается список.
Ответы (1 шт):
Автор решения: Rsecomua
→ Ссылка
у вас пробелма из за того что вы не правильное событие выбрали, после выполнения вашего кода контрол комбобока получает еще и ентер ( он никуда не делся)
перенесите в ComboBox1KeyUp а список разворачивайте с помощью
combobox1.DroppedDown:=true; или если нужно использовать именно ваше событие то обнуляйте нажатую кнопку key:=#0; и тогда к самому контролу событие ентера не придет