【问题标题】:Remove images from Listview Columns从 Listview 列中删除图像
【发布时间】:2013-06-28 11:25:10
【问题描述】:
对于ListView 中的列,我使用自己的图像来显示排序是升序还是降序。当我设置column.ImageKey 属性时,列的文本会向右移动,以便为图像腾出空间。我遇到的问题是当我不再需要图像时如何删除它。通过设置column.ImageKey = "" 和column.ImageIndex = -1 我删除了图像,但文本不在它的起始位置。所以基本上我只是重置了图像对象位图,但我没有删除图像对象本身。所以我想知道如何删除/禁用图像对象。
【问题讨论】:
标签:
c#
.net
winforms
visual-studio-2012
【解决方案1】:
要从列中删除图像,您需要在删除图像后恢复列的默认文本对齐方式:
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 时,它不会改变对齐方式。
【解决方案2】:
随着 Sergey Berezovskiy 答案的细微变化,当您每列有不同的文本对齐方式时,您也可以这样做;
column.ImageIndex = -1;
column.TextAlign = column.TextAlign;