我有一个包含多个列的ListView . ListView的SmallImageList包含三个图标;向上箭头,向下箭头和文件夹图标 . 单击其中一个列 Headers 时,列表将按该值排序,为了说明这一点,将在 Headers 中插入一个图标,显示其SmallImageList中的向上或向下箭头 . 这很好用 .
我的问题是,当点击一个新列进行排序时,旧 Headers 中的图标应该消失,但事实并非如此 . 而是插入文件夹图标 . 每次单击新 Headers 时都会发生这种情况,因此最终所有 Headers 都填充了文件夹图标 .
每当单击一列时,所有列都会被迭代,并且它们的ImageKey被设置为空字符串,如果是单击的列,则后面会被ImageKey替换为箭头 . 空字符串显然加载文件夹图标 .
for (int i = 0; i < m_LVCases.Columns.Count; i++)
{
m_LVCases.Columns[i].ImageKey = "";
if (i == e.Column)
{
if (m_ListViewColumnSorter.Order == SortOrder.Ascending)
m_LVCases.Columns[i].ImageKey = SortOrder.Ascending.ToString();
else if (m_ListViewColumnSorter.Order == SortOrder.Descending)
m_LVCases.Columns[i].ImageKey = SortOrder.Descending.ToString();
}
}
我还不能发布截图,因为我没有足够的声誉 . 有没有人有完全从列 Headers 中删除图标的解决方案,或者我是否需要做一些魔法以另一种方式显示它?
--Edit-- 这是我接手的一个项目,所以我试图把事情拼凑起来 . 我发现将列的ImageKey设置为 null
,导致所有 Headers (除了单击之一)得到了文件夹图标,这对我来说很奇怪 . 我尝试添加一个只有透明色的新图标 . 事实上,这确实清除了所有图标,但它留下了图标本应存在的空白 . 有没有办法将icon-allignment放在右边,所以它不会移动每列的 Headers 文本?
2 回答
在MSDN参考中有一个非常干净的例子here
你正在做的是非常不同的,但可能对你有帮助的是将列sortimage的.visible属性设置为false为其他列 .
我自己解决了这个问题 . 我试图将图标放在文本的右侧,但是通过在清除imageKey之后将列的TextAlign属性设置为任何内容,文件夹图标停止显示 .
所以我删除了症状,但我仍然不知道这是什么病 .