我有一个listview,如果用户双击它,想要将项目的字体颜色更改为clRed。但是,如果用户双击另一个项目,则所有其他项目应返回到黑色字体颜色,新双击项目将更改为clRed - 依此类推。
我这里有这个代码:
var
CurrentProfile : String; // Global var that stores the caption of the double clicked item.
procedure TForm1.ListView1DblClick(Sender: TObject);
begin
if ListView1.Selected <> NIL then CurrentProfile := ListView1.Selected.Caption;
end;
procedure TForm1.ListView1CustomDrawItem(
Sender: TCustomListView; Item: TListItem; State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
if item.Caption = CurrentProfile then begin
Sender.Canvas.Font.Color := clRed;
end else begin
Sender.Canvas.Font.Color := clBlack; // if not change it back to black
end;
end;
使用此代码,每个双击项目都保持clRed。为什么它不会改回clBlack?请帮忙。提前谢谢。
PS。:我使用的是delphi7。
答案 0 :(得分:2)
双击事件处理程序需要强制重绘。在该处理程序的末尾调用ListView1.Invalidate
。这将强制列表视图上的绘制周期。
procedure TForm1.ListView1DblClick(Sender: TObject);
begin
if ListView1.Selected <> NIL then
begin
CurrentProfile := ListView1.Selected.Caption;
ListView1.Invalidate;
end;
end;