将鼠标悬停在2个Listview列之间时更改光标

时间:2014-09-25 21:48:08

标签: c# winforms listview cursor

当在2个Listview列之间悬停时,有没有办法将光标更改为默认值?

2 个答案:

答案 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就是这样做的。