2014-09-25 4 views

ответ

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

Но можете ли вы не менять курсор Все время, когда вы перемещаетесь внутри списка? Я попробовал что-то подобное, но не получил его на работу. – spunit

0

Это непросто, но это возможно.

Основная стратегия состоит в том, чтобы прослушивать WM_SETCURSOR в элементе управления заголовком ListView и внутри обработчика для этого сообщения, проверить, находится ли мышь над разделителем, который вы хотите, либо отменить сообщение (оставляет курсор по умолчанию), либо разрешить его продолжить (изменяет курсор).

ObjectListView делает именно это.

Смежные вопросы