即使清除了其余文本,Delphi虚拟TListView - 图标仍保持选中状态

时间:2016-05-23 15:45:39

标签: listview delphi delphi-xe2 virtual

我有一个虚拟TListView,它有一个TImageList。 item.ImageIndex在OnData事件上设置。 listview是只读的,并且RowSelect为true,并在vsReport ViewStyle中显示。

当我选择一行然后选择第二行时,第一行的图标将保留所选的彩色背景。如果我将鼠标移到它上面(以便显示较淡的“可选”背景),然后在不选择任何内容的情况下关闭鼠标,背景将恢复为正常白色。

通过smallImages / ImageIndex或StateImages / StateIndex设置图像时似乎会出现错误

这是一个已知的错误,是否有任何变通方法?我已经尝试在OnSelectItem下放置一个刷新事件,虽然这似乎是错误的,因为当我通过'未选择'的TListItem时,Item参数总是为nil('selected'传递工作正常,但两者都工作对于非虚拟模式)。

这是在Delphi XE2中发生的,这是我可用的最新版本。如果它仍然存在于更高版本中,那么我可以提出错误报告。

Image showing 'sticky' selection

可能有一些影响的另一个缓解因素:使用DevExpress皮肤库对应用程序进行换肤。这不应该影响OnSelectItem错误。

编辑: 使用Listbox和1个图标的图像列表在一个简单的表单示例中重现,使用以下代码:

procedure TForm28.FormCreate(Sender: TObject);
begin
  listview1.Items.Count := 5;
end;

procedure TForm28.ListView1Data(Sender: TObject; Item: TListItem);
begin
  item.Caption := 'item #' + inttostr(item.Index);
  item.ImageIndex := 0;
end;

除了设置SmallImages和OwnerData = true以及ViewStyle = report

之外,列表框设置为默认值

使用viewStyle作为vsIcon我看到一个类似的问题,选择高亮不被清除'高'足够在项目顶部留下蓝色边框。

我想知道这是Windows版本的问题,Windows改变了组件的样式,但Delphi控制区域重绘?我正在这台机器上使用Win 8 Pro。

0 个答案:

没有答案