2014-09-25 3 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

커서를 변경할 수 없습니까? 예를 들어 목록보기 내부를 이동할 때마다? 나는 그런 것을 시도했지만 그것이 작동하지 않았다. – spunit

0

쉽지는 않지만 가능합니다.

기본 전략은 ListView의 머리글 컨트롤에있는 WM_SETCURSOR을 수신하고 해당 메시지의 처리기 내에서 마우스가 원하는 구분선 위에 있는지 확인한 다음 메시지를 취소하거나 (기본적으로 커서 놓기) 또는 그것을 진행 시키십시오 (커서를 변경하십시오).

ObjectListView 정확히 수행합니다.

관련 문제