【发布时间】:2019-04-05 08:55:29
【问题描述】:
我有一个来自 BrightIdeasSoftware 的 objectlistview。目前我可以在这个列表中添加和删除,但是我不能绘制我的行颜色(NOT HEADER)我只是想将我的列表的一半重新着色为红色,其余部分为蓝色。
通常我会这样做:
for (int i = 0; i < index; i++)
{
mainForm.MyListView.Items[i].BackColor = Color.LightGray;
}
mainForm.MyListView.Items[index].BackColor = Color.DarkGreen;
for (int i = index; i < mainForm.MyListView.Items.Count; i++)
{
mainForm.MyListView.Items[i].BackColor = Color.FromArgb(18, 18, 18);
}
但这不起作用,我也尝试在重新着色后刷新对象但仍然不起作用。我已经检查了this,但我不想在我只想给出一个索引然后重新着色我的列表视图的条件下这样做。
有人可以告诉我如何实现这一目标吗?非常感谢
编辑:我将分享我的整个方法,这样会更清楚..
public void PaintToIndex(int index)
{
for (int i = 0; i < index; i++)
{
mainForm.MyListView.Items[i].BackColor = Color.LightGray;
}
mainForm.MyListView.Items[index].BackColor = Color.DarkGreen;
for (int i = index; i < mainForm.MyListView.Items.Count; i++)
{
mainForm.MyListView.Items[i].BackColor = Color.FromArgb(18, 18, 18);
}
}
EDIT2:我想我可能找到了一些东西,我已经将我的方法更改为这个,但它正在自我更新。
for (int i = 0; i < index; i++)
{
OLVListItem CurItem = mainForm.MyListView.GetItem(i);
CurItem.BackColor = Color.LightGray;
//mainForm.MyListView.RefreshItem(CurItem);
}
mainForm.MyListView.GetItem(index).BackColor = Color.LightGray;
for (int i = index; i < mainForm.MyListView.Items.Count; i++)
{
OLVListItem CurItem = mainForm.MyListView.GetItem(i);
CurItem.BackColor = Color.FromArgb(18, 18, 18);
//mainForm.MyListView.RefreshItem(CurItem);
}
当我打开 RefreshItem 时,它会将我的 OLVListItem 更新回以前的颜色..
编辑 3: 我找到了解决方案。我在设置完所有颜色后做了 Refresh() 但现在我遇到了另一个问题,当我用鼠标悬停时,颜色又变回来了..
【问题讨论】:
-
请阅读此解决方案,它可能对您有所帮助:stackoverflow.com/questions/13087648/…
-
这是使用普通的 ListView。答案是正确的,如果我也使用 Windows ListView 它将起作用。但相反,我使用 ObjectListView,这不起作用
-
作为使用 OLV 的一般建议,请务必阅读 this。如果您发现自己在用 Items[] stop 搞乱,几乎肯定有更好的方法。
-
感谢您的链接,在 OLV 中不再使用 Items[] :)
-
一如既往:webforms 还是 winforms?
标签: c# objectlistview