当在2个Listview列之间悬停时,有没有办法将光标更改为默认值?
答案 0 :(得分:1)
明确问题。 ListView不为列标题提供鼠标悬停事件。如果您尝试在列标题上移动鼠标,那么您将无法获得可以确定鼠标悬停的任何事件。如果您正在谈论ListView Control的客户端区域,那么您可以这样做。
private void listView1_MouseMove(object sender, MouseEventArgs e)
{
if (r.Contains(e.Location))
return;
int columnIndex = getColumnIndex(e.Location);
if (columnIndex == 3)
listView1.Cursor = Cursors.Hand;
else
listView1.Cursor = Cursors.Default;
}
Rectangle r = Rectangle.Empty;
private int getColumnIndex(Point p)
{
r = Rectangle.Empty;
for (int i = 0; i < listView1.Columns.Count; i++)
{
r = new Rectangle(r.X + r.Width, 0, listView1.Columns[i].Width, listView1.Height);
if (r.Contains(p))
return i;
}
return -1;
}
答案 1 :(得分:0)
这并不容易,但有可能。
基本策略是在ListView的头控件上侦听WM_SETCURSOR
,并在该消息的处理程序内部,检查鼠标是否在你想要的分隔符之上,然后取消消息(将光标保留为默认值)或允许其继续(更改光标)。
ObjectListView就是这样做的。