1

我在 Windows 7 64 位上使用 XE5 Update 2(所有更新都是最新的)。

我有一个带有简单 TListView 对象的应用程序。

object lsvReceipts: TListView
  Left = 0
  Top = 0
  Width = 1382
  Height = 760
  Align = alClient
  Columns = <
    item
      Caption = 'Column 1'
      Width = 100
    end
    item
      Caption = 'Column 2'
      Width = 100
    end
    item
      Caption = 'Column 3'
      Width = 100
    end
    item
      Caption = 'Column 4'
      Width = 100
    end>
  MultiSelect = True
  OwnerData = True
  RowSelect = True
  TabOrder = 0
  ViewStyle = vsReport
  OnData = lsvReceiptsData
  ExplicitLeft = 136
  ExplicitTop = 200
  ExplicitWidth = 521
  ExplicitHeight = 321
end

这是一些密码。它只是显示来自 fireac TFDQuery 对象的数据。

procedure TForm3.lsvReceiptsData(Sender: TObject; Item: TListItem);
var index: integer;
begin

 index := Item.Index;
 receiptsQuery.RecNo := index;
 Item.Caption := dockReceiptsQueryDR_.AsString; 
 Item.SubItems.Add(receiptsQueryDOCK_RCPT_ID.AsString);
 Item.SubItems.Add(receiptsQueryRCVD_DATE.AsString);
end;

如下图所示,当我选择几行然后取消选择它们时,会出现一些重绘问题。如果我将 OwnerData 设置为 false 并使用 lsvReceipts.Items.Add 方法手动将记录添加到列表中,则不会发生。

关于如何摆脱这个的任何想法?根据我在这里看到的其他消息,控件充满了问题。不幸的是,我现在必须使用它。

如果您想知道,我需要一个包含多列的列表,用户可以在其中选择多条记录。我开始使用带有多选选项集的 DBGrid,但是,在使用它一段时间后,选择多行的功能受到限制(例如,SHIFT+Click、SHIFT+PageUp/PageDown 不起作用)。无论如何,我们计划将来升级到 devexpress 网格,但现在我必须坚持使用 vcl vanilla 控件。

谢谢

在此处输入图像描述

4

0 回答 0