当强制用户从下拉列表中进行选择时,我将组合框的样式设置为 csDropDownlist。
但是,以后的所有输入都只有一个字符。这意味着,用户不能通过键入多个字符来缩小组合中的搜索范围。那就没用了。
将样式设置为 csDropDown 时,您可以键入多个字符来缩小搜索范围,
但是您不再被迫从列表中进行选择
有没有办法结合这些行为?
感谢您的所有投入。
我在这里找到了一个解决方法: How to both autocomplete and limit to list with Delphi TComboBox ,我做了一些修改:
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
var
s, t: string;
i, l: Integer;
const CrLf = #13#10;
begin
// Skip functional keys
if Key < ' ' then
Exit;
key := upcase(key);
// Get text which can be in the combo after key pressed
i := ComboBox1.SelStart;
l := ComboBox1.SelLength;
t := ComboBox1.Text;
s := Copy(t, 1, i) + Key;
// Check is this text corresponds to the values list
if pos(CrLf+s, CrLf+combobox1.Items.Text) > 0 then
exit;
Key := #0;
end;
现在它的工作原理完全符合预期,但我还没有测试过长的项目列表。
但是谢谢大家。