2017-03-02 24 views
-2

如果關聯的對象具有特定的值,我希望comboBox項目改變顏色。 我做了以下內容:在DrawItem上的組合框不起作用

with Control as TComboBox do 
    begin 
    Canvas.Font.Color:=clBlack; 
    Canvas.Brush.Color := clWhite ; 
    if TMyObj(MyCb.Items.Objects[MyCb.ItemIndex]).C = 'C' then 
     Canvas.Brush.Color := clred ; 
    Canvas.FillRect(Rect); 
    Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]) 
end; 

我可以看到所有的組合項目的白底黑字。當我將鼠標懸停鼠標,一切就至極的項目我懸停顯示爲紅色(即使C值不是「C」

你明白爲什麼?

+1

如果有問題的組合框被稱爲'MyCb ',爲什麼你要把它拼出來,即使你上面有'用TCombobox做'的控件?爲了你的問題,也許你打算使用'Index:integer'參數而不是'Item Index'?如果沒有,請提供一個[MCVE](http://stackoverflow.com/help/mcve),因爲我不能在描述時重現問題(其中一個原因是「TMyObj」完全未知)。 –

回答

2

的是,你要反覆設置顏色基礎上的ItemIndex,該項目的繪製過程中不會改變。你應該使用Index當方法被調用的參數之一提供。

with Control as TComboBox do 
begin 
    Canvas.Font.Color := clBlack; 
    Canvas.Brush.Color := clWhite ; 
    if TMyObj(Control.Items.Objects[Index]).C = 'C' then // Change this line 
    Canvas.Brush.Color := clred ; 
    Canvas.FillRect(Rect); 
    Canvas.TextOut(Rect.Left, Rect.Top, Items[Index]) 
end; 
+0

是Ken ,完美,我不得不用'Items.Objects ..'修改'Control.Objects ..'語句,然後它終於按我預期的那樣工作了,謝謝 – Stark

+0

謝謝你指出,我已經修正了它不會混淆未來的任何人。:-) –

相關問題