我在 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 控件。
谢谢