C# listview SelectedItems[0].Remove()에 대해 질문드립니다

안녕하세요. 반갑습니다.

Window Forms에서 가사 다운받기와 노래에 가사를 넣는 프로그램을 만들고 있습니다.
listview에 가사를 넣을 음악과 가사 txt파일을 올려서 집어 넣는 방식입니다.
listview에서 선택된 파일을 삭제하는 기능을 추가 중에 문제가 생겨서 글을 올립니다.

before1
after

사진과 같이 왼쪽 listview1를 선택후 오른쪽 listview2를 선택후
Delete버튼을 클릭시 왼쪽 listview1에서 삭제가 됩니다…
혹시나 listview 속성에서 HideSelection을 true로 줘봤지만 똑같은 형상이 일어납니다.

private void Delete_Click(object sender, EventArgs e)
{ 
    //Delete Button 이벤트 소스입니다.
    /* if (SongView.SelectedItems.Count > 0 && LyricsView.SelectedItems.Count > 0)
     {
         SongView.SelectedItems[0].Remove();
         LyricsView.SelectedItems[0].Remove();
         SongView.Update();
         LyricsView.Update();
     }*/
    if (SongView.SelectedItems.Count > 0)
    {
        SongView.SelectedItems[0].Remove();
        SongView.Update();
    }
    else if(LyricsView.SelectedItems.Count > 0)
    {
        LyricsView.SelectedItems[0].Remove();
        LyricsView.Update();
    }
}
2 Likes

공유 주신 코드로는 listview1의 선택 목록이 삭제되는게 맞습니다.

  • 개별 ListView의 선택은 개별입니다. 그러므로 listview1도 여전히 선택 상태에 있고, listview2도 역시 선택 상태입니다.
  • 그런데, 공유주신 소스코드 중 if (조건1) else if (조건2)...이므로 조건1에서 listview1이 선택되어 있기 때문에 첫번째 if문의 블럭이 동작 (listview1의 목록이 삭제됨) 했습니다.

둘다 목록이 삭제되기를 원하시나요? 그러면 else if 대신 if문을 사용하면 됩니다.

마지막 선택한 목록만 삭제하기를 원하시나요? list1의 목록이 선택되었을 경우, list2의 목록선택을 취소하는 코드를, list2의 목록이 선택되었을 경우 list1의 목록선택을 취소하는 코드를 하셔야 합니다.

3 Likes

네 답변감사합니다. 소스상으로는 listview1의 선택 목록이 삭제되는게 맞습니다.
마지막으로 선택된 목록만 삭제하고 싶습니다. ㅎㅎ
목록선택 취소하는 코드를 찾아 보겠습니다.

감사합니다.

2 Likes
private void listView_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e)
{
    listView.SelectedIndices.Clear();
}

감사합니다. 해답을 찾았습니다.
간단하다는 느낌을 받네요. C# 초보라 어떻게 해야 할지 감이 안 잡혔습니다.
다시 한번 답변 감사드립니다.

3 Likes