1

リストビューがあり、ユーザーがアイテムをダブルクリックした場合にアイテムのフォントの色を 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 を使用しています。

4

1 に答える 1

2

ダブルクリック イベント ハンドラは再描画を強制する必要があります。ListView1.Invalidateそのハンドラの最後で呼び出します。これにより、リスト ビューでペイント サイクルが強制されます。

procedure TForm1.ListView1DblClick(Sender: TObject);
begin
  if ListView1.Selected <> NIL then 
  begin
    CurrentProfile := ListView1.Selected.Caption; 
    ListView1.Invalidate;
  end;
end;
于 2012-09-21T07:20:17.537 に答える