C# 윈폼 CheckedListBox에서 항목 추가 및 선택한 항목 제거하기 예제


C# 윈폼에서 CheckedListBox 컨트롤은 여러 개의 CheckBox가 하나의 ListBox 안에 포함되어 있는 형태의 컨트롤을 말합니다.

ListBox 형태이기 때문에 필요에 따라 CheckBox를 추가하거나 삭제할 수 있어 편리하게 사용할 수 있는 컨트롤입니다.

이번 글에서는 C# 윈폼 CheckedListBox에서 항목 추가 및 선택한 항목 제거하기 예제와 foreach 구문을 사용할 때 주의할 점에 대해 알아 보겠습니다.

CheckedListBox 항목 추가하기

CheckedListBox의 항목 추가는 list.Items.Add() 호출하여 쉽게 추가할 수 있습니다.

private void btnAdd_Click(object sender, EventArgs e)
{
    checkedListBox1.Items.Add(txtAddItem.Text);
}
 
C# 윈폼 CheckedListBox에서 항목 추가 및 선택한 항목 제거하기 예제

CheckedListBox에서 선택한 항목 제거하기

CheckedListBox에서 선택한 항목을 제거하기 위해서는 List를 역순으로 반복문을 돌리면서 list.Items.RemoveAt() 호출하여 제거할 수 있습니다.

private void btnRemove_Click(object sender, EventArgs e)
{
 
    for (int i = checkedListBox1.Items.Count  1; i >= 0; i)
    {
        if (checkedListBox1.GetItemChecked(i))
            checkedListBox1.Items.RemoveAt(i);
    }
 
    // 선택한 항목 삭제의 잘못된 예시(앞에서부터 반복)
    //for (int i = 0; i < checkedListBox1.Items.Count; i++)
    //{
    //    if (checkedListBox1.GetItemChecked(i))
    //        checkedListBox1.Items.RemoveAt(i);
    //}
 
}
 

리스트(List)의 항목 삭제를 앞의 항목 인덱스부터 순차적으로 삭제할 경우 아래 캡처한 화면처럼 잘못된 결과를 초례하게 됩니다.

앞의 항목 인덱스가 제거될 경우 뒤쪽의 항목 인덱스가 변하게 됩니다. 0번 인덱스를 제거하면 원래 1이었던 인덱스가 0으로 변하게 되는 것입니다.

C# 윈폼 CheckedListBox에서 항목 추가 및 선택한 항목 제거하기 잘못된 예제

foreach문으로 리스트의 항목을 삭제할 경우 예외 에러 발생

▶ 만약 위의 for문의 삭제 구문을 아래와 같은 foreach 구문으로 바꾸어 실행한다면 어떤 결과가 나올까요?

foreach (var item in checkedListBox1.CheckedItems)
{
    checkedListBox1.Items.Remove(item);
}
 
foreach문으로 리스트의 항목을 삭제할 경우 예외 에러 발생

위의 foreach 구문으로 실행을 하면 아래와 같은 오류를 만나게 됩니다.

에러 : System.InvalidOperationException: ‘이 열거자가 바인딩된 목록이 변경되었습니다. 열거자는 목록이 변경되지 않는 경우에만 사용할 수 있습니다.’





이 글이 도움이 되었기를 바랍니다. ^-^


답글 남기기