将光标悬停在两列Listview之间时更改光标

本文关键字:光标 之间 Listview 两列 悬停 | 更新日期: 2023-09-27 18:24:39

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

将光标悬停在两列Listview之间时更改光标

明确您的问题。ListView没有为列标题提供鼠标悬停事件。如果您尝试在列标题上移动鼠标,则不会得到任何可以确定鼠标悬停的事件。如果您谈论的是ListView控件的客户端区域,那么您可以这样做。

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;
}

这并不容易,但它是可能的。

基本策略是在ListView的头控件上侦听WM_SETCURSOR,在该消息的处理程序中,检查鼠标是否在所需的分隔符上,然后取消消息(将光标保留为默认值)或允许它继续(更改光标)。

ObjectListView正是这样做的。