當強制用戶從下拉列表中選擇 時,我將組合框樣式設置爲csDropDownlist。 鍵入ahead TComboBox csDropDownList; Delphi 10
但是,以後所有的輸入只是一個字符。 這意味着,用戶不能通過鍵入多個字符來縮小組合中的搜索範圍。那麼不是有用的。
當設置風格csDropDown,您可以鍵入多個字符來縮小搜索範圍,
但你不會被強迫從列表中任意選擇不再
有一種結合這些行爲的方式?
當強制用戶從下拉列表中選擇 時,我將組合框樣式設置爲csDropDownlist。 鍵入ahead TComboBox csDropDownList; Delphi 10
但是,以後所有的輸入只是一個字符。 這意味着,用戶不能通過鍵入多個字符來縮小組合中的搜索範圍。那麼不是有用的。
當設置風格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;
現在,它的工作原理完全如願,但我還沒有長的項目列表中進行過測試。
但是,謝謝大家。
想想剪貼板粘貼以及。 – Victoria
剛剛在Delphi 2007中測試過(現在手邊沒有更新的版本) - 在csDropDownList Combobox中,我可以輸入'Item 4',它會正確選擇那個元素。這是不是所需的行爲?我錯過了什麼嗎? –
_「有沒有辦法將這些行爲結合起來?」_是的。停止輸入:)或者確保用戶在沒有要匹配的項目時不能輸入。您根本無法選擇不存在的項目。 – Victoria
行爲是你想要的,但有警告。如果你多次按下I鍵,它會一個接一個地下到列表中。如果您足夠快地鍵入文本*,它將按照您的想法行事。如果你輸入太慢,它會按照你描述的方式進行。我認爲這是Windows的行爲,所以不應該是Delphi版本依賴。 – Dsm