C# 在两个Listview列之间悬停时更改光标

C# 在两个Listview列之间悬停时更改光标,c#,winforms,listview,cursor,C#,Winforms,Listview,Cursor,当光标悬停在两个Listview列之间时,是否有办法将光标更改为默认值?请澄清您的问题。ListView不为列标题提供鼠标悬停事件。如果尝试在列标题上移动鼠标,则不会得到任何可以确定鼠标悬停的事件。如果您谈论的是ListView控件的客户机区域,那么您可以这样做 private void listView1_MouseMove(object sender, MouseEventArgs e) { if (r.Contains(e.Location)) return;

当光标悬停在两个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;
}
private void listView1\u MouseMove(对象发送方,MouseEventArgs e)
{
如果(r.包含(e.位置))
返回;
int columnIndex=getColumnIndex(如位置);
如果(columnIndex==3)
listView1.Cursor=Cursors.Hand;
其他的
listView1.Cursor=游标。默认值;
}
矩形r=矩形。为空;
私有int getColumnIndex(点p)
{
r=矩形。为空;
对于(int i=0;i
这并不容易,但却是可能的

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


确实如此。

但是,例如,在listview中移动光标时,您不能一直更改光标吗?我试过那样的方法,但没有成功。