1

对于 a 中的列,ListView我使用自己的图像来显示排序是升序还是降序。当我设置column.ImageKey属性时,列的文本向右移动以为图像腾出空间。我遇到的问题是当我不再需要图像时如何删除它。通过设置column.ImageKey = ""column.ImageIndex = -1我删除图像,但文本不在它的起始位置。所以基本上我只是重置了图像对象位图,但我没有删除图像对象本身。所以我想知道如何删除/禁用图像对象。

4

2 回答 2

6

要从列中删除图像,您需要在删除图像后恢复列的默认文本对齐方式:

column.ImageIndex = -1;
column.TextAlign = HorizontalAlignment.Center;

为什么有帮助?因为当您将图像索引> = 0分配给列标题时,内部会调用以下方法

ListView.SetColumnInfo(0x10, column);

这会改变列的文本对齐方式

lParam.iImage = column.ActualImageIndex_Internal;
lParam.fmt |= 0x800;
lParam.fmt |= column.TextAlign;
UnsafeNativeMethods.SendMessage(new HandleRef(this, Handle), 
     NativeMethods.LVM_SETCOLUMN, column.Index, lParam);

但是当您将图像索引设置为 -1 时,它不会改变对齐方式。

于 2013-06-28T11:50:00.340 回答
2

随着 Sergey Berezovskiy 答案的细微变化,当每列有不同的文本对齐方式时,您也可以这样做;

column.ImageIndex = -1;
column.TextAlign = column.TextAlign;
于 2018-03-08T15:09:27.487 回答