2014-09-25 68 views

回答

1

使你的问题清楚。 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; 
} 
+0

但是你不能改变光标在listview中移动的所有时间例如?我尝试过这样的事情,但没有得到它的工作。 – spunit 2014-09-26 17:13:01

0

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

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

ObjectListView完全是这样。

相关问题