我使用的ListView包含一些用户可以点击的子项(有些他不能)。每行都是相同的。我用一定的背景标记这些可点击的子项。
但是当选择整行时(和FullRowSelect = true),突出显示会为所有子设置相同的背景颜色。
我想要做的是向用户显示他选择了哪一行,但仍保留子项目的不同背景。我玩了一点所有者绘制ListView,但找不到办法做到这一点。
感谢您的帮助! 汤姆
答案 0 :(得分:1)
您需要将ListView
设置为OwnerDraw
并使用以下代码:
private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
if ( e.SubItem.Name != "click1") e.DrawDefault = true;
else
{
if (e.Item.Selected)
e.Graphics.FillRectangle(Brushes.SeaShell,
new Rectangle(e.Bounds.Location, e.Bounds.Size));
else e.Graphics.FillRectangle(Brushes.WhiteSmoke,
new Rectangle(e.Bounds.Location, e.Bounds.Size));
e.DrawText();
}
}
private void listView1_DrawColumnHeader(object sender,
DrawListViewColumnHeaderEventArgs e)
{
e.DrawDefault = true;
}
显然,您不仅会调整两种颜色/画笔,还会调整可点击列的名称和检查。(可能使用e.SubItem.Name.StartsWith("click_"
..)
请注意,您需要设置要查看的Names
的{{1}}; eventParms中没有提供SubItemIndex。另请注意,您可能需要在代码中分配SubItems
,即在创建/添加Name
时;我在设计师中设置的名字不知何故不坚持/工作!另请注意您在需要时如何获得ListViewItem.ListViewSubItem
资格!