這顯然是一個錯誤,但我無法追查爲什麼發生。這是一個簡單的代碼來重現。剛落窗體上的組合框和按鈕,並寫了以下事件處理程序:爲什麼組合框在更改字體時將其文本更改爲項目文本?
procedure TForm1.FormCreate(Sender: TObject);
begin
ComboBox1.Items.Add('A Item');
ComboBox1.Items.Add('B Item');
ComboBox1.Items.Add('C Item');
ComboBox1.Style := csDropDown;
ComboBox1.AutoComplete := False;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ComboBox1.Text := 'B';
ComboBox1.Font.Color := clRed;
ShowMessage(IntToStr(ComboBox1.ItemIndex));
end;
當你點擊按鈕的第一次,你會在充分選擇的第二項的文字組合編輯看到,但消息框會顯示項目索引等於-1。當你放下它時,第二個項目似乎被選中。第二次點擊將設置適當的文本,但其餘的將與第一次點擊相同。所以,在這種情況下,組合框的行爲就像是如果啓用一些奇怪的自動完成。
我已經跟蹤到EditWndProc
,在收到字體更改後WM_SETTEXT
消息與第二項的文本,但我不知道它來自哪裏,爲什麼與第二項的文本。
所以,我的問題是非常具體 - 什麼(哪種方法)發送WM_SETTEXT
在字體更改和它是如何知道關於第二項文本匹配時禁用自動完成?
到目前爲止,我可以在Delphi 2009和Delphi XE3上重新安裝Windows 7 Home Premium 64位並安裝最新的更新。
在delphi 2007中確認的相同行爲認爲這可能是一個Windows API錯誤,你在哪個版本的Windows中測試? – MikeT
我將它包含到問題中,在Windows 7上。 – TLama
已經添加了標籤:) – whosrdaddy