[C#] ListView 복사하는 방법, 클론 메서드 사용

[C#] ListView 복사하는 방법

ListView 복사

ListView에서 데이터를 복사하는 방법에 대해 알아보도록 합시다~ 하나의 ListView에서 다른 ListView로 복사할 때, 다음의 두 가지 코드를 참고할 수 있습니다.

  • 인스턴스를 그대로 할당하여 복사하는 방법 (얕은 복사)
  • Clone 메서드로 복사하는 방법 (깊은 복사)

편의상 복사의 출처가 되는 ListView를 listViewFrom라 하고, 복사의 목표 ListView를 listViewTo라 명명하겠습니다.

인스턴스 할당

다음과 같은 명령어로 같은 주소를 참조할 수 있습니다.

listViewTo = listViewFrom;

Clone

출처 리스트 뷰를 반복하여 대상 리스트 뷰의 아이템에 추가하는 방법입니다.

foreach (ListViewItem item in listViewFrom.Items)
    {
        listViewTo.Items.Add((ListViewItem)item.Clone());
    }

ListView 복사

인스턴스를 그대로 할당하는 경우, 같은 참조 영역에 있기에 출처 리스트 뷰를 수정하면, 목표 리스트 뷰도 변경될 것입니다. 반면, 클론 메서드를 사용하는 경우에는 새로운 객체를 복제하여 만든 다음에 각 항목을 추가하는 방법이란 것을 기억해 주세요. 다음은 인스턴스와 클론 메서드를 사용한 예제 자료입니다. 비교 시 참고해 주십시오~

void BeomSang()
{
    ListView listViewFrom, listViewTo;
    listViewFrom = new ListView();
    listViewTo = new ListView();
    listViewFrom.Items.Add(string.Empty);
    listViewFrom.Items[0].Text = "ItemFrom0";
    listViewTo = listViewFrom;
    Debug.WriteLine("listViewTo = new ListView();");
    Debug.WriteLine($"From : {listViewFrom.Items[0].Text}");
    Debug.WriteLine($"To : {listViewTo.Items[0].Text}");
    listViewFrom.Items[0].Text = "ItemFrom0M";
    Debug.WriteLine("listViewFrom.Items[0].Text = \"ItemFrom0M\";");
    Debug.WriteLine($"From : {listViewFrom.Items[0].Text}");
    Debug.WriteLine($"To : {listViewTo.Items[0].Text}");

    Debug.WriteLine(string.Empty);

    listViewFrom = new ListView();
    listViewTo = new ListView();
    listViewFrom.Items.Add(string.Empty);
    listViewFrom.Items[0].Text = "ItemFrom0";
    foreach (ListViewItem item in listViewFrom.Items)
    {
        listViewTo.Items.Add((ListViewItem)item.Clone());
    }
    Debug.WriteLine("listViewTo.Items.Add((ListViewItem)item.Clone());");
    Debug.WriteLine($"From : {listViewFrom.Items[0].Text}");
    Debug.WriteLine($"To : {listViewTo.Items[0].Text}");
    listViewFrom.Items[0].Text = "ItemFrom0M";
    Debug.WriteLine("listViewFrom.Items[0].Text = \"ItemFrom0M\";");
    Debug.WriteLine($"From : {listViewFrom.Items[0].Text}");
    Debug.WriteLine($"To : {listViewTo.Items[0].Text}");
}

위의 코드는 다음과 같은 출력을 나타냅니다.

listViewTo = new ListView();
From : ItemFrom0
To : ItemFrom0
listViewFrom.Items[0].Text = "ItemFrom0M";
From : ItemFrom0M
To : ItemFrom0M

listViewTo.Items.Add((ListViewItem)item.Clone());
From : ItemFrom0
To : ItemFrom0
listViewFrom.Items[0].Text = "ItemFrom0M";
From : ItemFrom0M
To : ItemFrom0
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗