2010-07-07 3 views
0

적어도 하나 이상의 항목이 항상 ListBox에서 선택 상태로 유지됩니다. 사용자가 ListBox의 빈 영역을 클릭하면 선택을 취소해야합니다. 이 작업을 수행하는 방법?빈 영역을 클릭하면 목록 상자 선택 취소

내 응용 프로그램의 일부로 Opera Notes를 복제하려고합니다. 먼저 바인드 된 DataGridView를 사용했습니다. 이제 왼쪽 창에서 바인드 된 ListBox를 사용하고 있습니다.

답변

3

ListBox.MouseDown 이벤트를 처리합니다.

ListBox.IndexFromPoint를 호출하여 MouseDown 이벤트의 MouseEventArgs 매개 변수에서 Location 속성을 전달합니다.

클릭 한 항목의 인덱스를 반환하거나, 클릭 한 빈 영역에 ListBox.NoMatches를 반환해야합니다.

반환 값이 ListBox.NoMatches 인 경우 ListBox.SelectedIndex 속성을 -1로 설정하여 선택을 지 웁니다.

+0

고마워요! 나는 listbox를 사용하여이를 수행했는데, DataGrid 뷰에서도 동일한 작업을 수행 할 수 있습니까? – SMUsamaShah

+0

MouseEventArgs를 얻기 위해 MouseDown에 대한 새 처리기를 만들지 않아도된다는 점에 유의하십시오. 기존 클릭 핸들러에서 e를 새 MouseEventArgs 변수로 캐스팅하고 그 위치에서 위치를 가져올 수 있습니다. –

1

Mr. Avalanchis 님이 이미 질문에 답변했습니다. 나는 그가 제안한 단계를 수행하는 데 필요한 코드를 추가하기 만하고있다. 희망의 코드가 도움이되기를 바랍니다.

private void listBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     Point pt = new Point(e.X, e.Y); 
     int index = listBox1.IndexFromPoint(pt); 

     if (index <= -1) 
     { 
      listBox1.SelectedItems.Clear(); 
     } 


    }