2014-09-25 43 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完全是這樣。

相關問題