这是一个简单的问题,但我认为它会比听起来要难得多
当焦点离开列表视图时,我想保留listview项目的选择,此时我将hideselection
属性设置为false,这很好..它确实会导致非常在列表视图丢失焦点后留下的浅灰色选择,所以我的问题是,如何才能正确显示该项目仍然被选中,以便用户能够识别,例如更改行文本颜色或背景颜色?或者只是保持高亮显示,因为当第一次选择时整行变成蓝色?
我看了一下intelisense并且似乎找不到任何行或项目或所选项目的个别颜色属性?
它必须存在,因为所选项目有自己的背景颜色,我可以在哪里更改?
哦,列表视图确实需要保留在详细信息视图中,这意味着我无法使用我在google搜索时能够找到的唯一方法
感谢
答案 0 :(得分:4)
这是一个不允许多项选择的ListView解决方案 没有图像(例如复选框)。
按如下方式实现事件处理程序:
private void listView1_Leave(object sender, EventArgs e)
{
// Set the global int variable (gListView1LostFocusItem) to
// the index of the selected item that just lost focus
gListView1LostFocusItem = listView1.FocusedItem.Index;
}
private void listView1_DrawItem(object sender, DrawListViewItemEventArgs e)
{
// If this item is the selected item
if (e.Item.Selected)
{
// If the selected item just lost the focus
if (gListView1LostFocusItem == e.Item.Index)
{
// Set the colors to whatever you want (I would suggest
// something less intense than the colors used for the
// selected item when it has focus)
e.Item.ForeColor = Color.Black;
e.Item.BackColor = Color.LightBlue;
// Indicate that this action does not need to be performed
// again (until the next time the selected item loses focus)
gListView1LostFocusItem = -1;
}
else if (listView1.Focused) // If the selected item has focus
{
// Set the colors to the normal colors for a selected item
e.Item.ForeColor = SystemColors.HighlightText;
e.Item.BackColor = SystemColors.Highlight;
}
}
else
{
// Set the normal colors for items that are not selected
e.Item.ForeColor = listView1.ForeColor;
e.Item.BackColor = listView1.BackColor;
}
e.DrawBackground();
e.DrawText();
}
注意:此解决方案可能会导致一些闪烁。对此的修复涉及为您创建ListView控件的子类 可以将受保护的属性 DoubleBuffered 更改为true。
public class ListViewEx : ListView
{
public ListViewEx() : base()
{
this.DoubleBuffered = true;
}
}
我创建了上述类的类库,以便将其添加到工具箱中。
答案 1 :(得分:0)