2017-03-02 34 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

谢谢你指出,我已经修正了它不会混淆未来的任何人。:-) –

相关问题