2009-06-25 3 views
3

기본적으로 사용자가 키를 누르면 마우스 커서 아래의 항목을 찾으려는 기능을 구현하려고합니다.목록 뷰 컨트롤에서 마우스 커서로 항목 가져 오기?

그래서 마우스 이벤트를 사용하지 않고 ListViewItem을 제공하지 않는 키보드 이벤트를 사용합니다.

마우스 위치를 가져 와서 컨트롤의 공간으로 변환해야하는 공간이 얼마인지 알 수 없습니다.

아이디어가 있으십니까?

+0

[devX article] (http://www.devx.com/vb2themax/Tip/18831)은 사용자가 찾고있는 것에 대해 이야기합니다. –

답변

13

당신이에 관심이있는 ListView를 제어 알고있는 경우, 다음과 같은 방법은 트릭을 할 것입니다 :

private ListViewItem GetItemFromPoint(ListView listView, Point mousePosition) 
{ 
    // translate the mouse position from screen coordinates to 
    // client coordinates within the given ListView 
    Point localPoint = listView.PointToClient(mousePosition); 
    return listView.GetItemAt(localPoint.X, localPoint.Y); 
} 

// call it like this: 
ListViewItem item = GetItemFromPoint(myListView, Cursor.Position); 
+0

감사합니다. 프레드릭, 오늘 제가 이것을 시도 할 것입니다. –

+2

마우스 이벤트 핸들러 안에서이 작업을 수행하는 경우 MouseDoubleClick, MouseEventArgs.Location은 이미 클라이언트 상대이므로 PointToClient()를 호출하지 않으려합니다. – dlchambers

0

마우스 위치에 따라 키보드의 동작이 조금 정통 소리를. 키보드 동작은 일반적으로 이전 키보드 동작에 의해 선택되거나 해당 항목에 대한 이전 마우스 클릭에 의해 화면에서 강조/집중/선택된 일부 항목에 영향을줍니다.

"마음에 새기는 것"이 ​​있거나 "독창적 인"(혼란스러운) 사용자 상호 작용으로 끝날 것입니다.

+0

사람을 걱정하지 마십시오.이 기능을 직접 추가하여 직접 개발할 수 있습니다. 그것은 최종 버전에 없을거야 :) –

관련 문제