정리가 필요한 카테고리(추후 정리)/C#,Unity

C#] 리스트뷰 항목(아이템) 더블 클릭 시 항목 읽어오기

TwinParadox 2017. 5. 16. 15:03
728x90

C#] 리스트뷰 항목 더블클릭 시 항목 읽어오기



리스트뷰에 있는 항목들에 대해서 더블클릭을 하면

그 항목의 정보들에 대해서 조회가 필요한 경우가 있다.


기본적으로 다룰 수 있는 여러 가지 이벤트를 이용하는 방법들이 많다.

MouseDown이나 다른 여러 가지 이벤트를 사용하는 꼼수들이 존재하지만

내가 원하던 것에 가장 근접한 방식은

MouseDoubleClick 이벤트를 이용하는 것이었다.


이벤트 자체는 마우스를 이용해 더블 클릭을 하면 발생하지만,

문제는 리스트뷰의 특정 항목에서만 작동하는 게 아니라,

리스트뷰에 대한 더블클릭으로 간주되는 것이라서 항목 조회가 되는 건 아니다.

(MouseDown이나 Hit를 사용하는 것도 이 때문이지만 구현이 복잡해진다.)


여기서 조금의 꼼수를 부릴 필요가 있다.

어떤 항목에 대한 값을 읽어 들이는 것이 목적이기 때문에

그 항목은 더블 클릭 과정에서 항목이 선택되기 마련이다.

즉 SelectedItems로 걸러내어

더블클릭한 항목을 조회하는 방법을 생각해볼 수가 있다.



1
2
3
4
5
if(lvFileList.SelectedItems.Count==1)
{
    ListView.SelectedListViewItemCollection items = lvFileList.SelectedItems;
    ListViewItem lvItem = items[0];
}
cs



lvItem으로 읽어온 항목을 이용할 수 있다.

더블 클릭한 행의 항목 세부사항은 SubItems등을 이용해 사용할 수 있고,

수정과 추가, 삭제 등도 쉽게 할 수 있다.


아래 메서드는 이전에 DirectoryCleaner라는 프로그램에 사용된 메서드로,

특정 리스트뷰 항목을 더블클릭하면 탐색기 창을 열어서

해당 파일이 있는 경로에 접근하는 메서드다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void lvFileList_MouseDoubleClick(object sender, MouseEventArgs e)
{
    if (lvFileList.SelectedItems.Count == 1)
    {
        ListView.SelectedListViewItemCollection items = lvFileList.SelectedItems;
        ListViewItem lvItem = items[0];
        try
        {
            Process.Start(lvItem.SubItems[1].Text);
        }
        catch
        {
            MessageBox.Show("존재하지 않는 경로입니다.", MessageBoxIcon.Error.ToString());
        }
    }
}
cs






선택한 아이템이 하나 있어야만 조건문이 발동하기 때문에,

다중 선택한 상태에서 더블 클릭을 하면 작동하지 않는다.

다중 선택한 것에 대한 정보를 얻기 위하면 조건문을 수정하고

항목들을 받아서 이용하면 된다.

728x90