2010-03-24 2 views
9

이전에 채워진 CheckedListBox가 있습니다. CheckedListBox의 모든 항목을 통해 "for each/next"로 반복하고 checklistbox의 각 반복 요소에 많은 "stuff"를 수행하려고합니다.CheckedListBox의 각 <item>에 대해 <item>은 컨트롤로 사용하지 않고 개체로 반환합니다.

예제 코드 :

For Each item In CheckedListBox1.Items 

     If item.Checked = True Then 

      'do stuff like 
      item.BackColor = Color.Blue 

     Else 

      'do other stuff 
      item.BackColor = Color.Brown 

     End If 

    Next 

문제는이 '객체'타입이 아닌 '관리'유형이다. CheckBox로 반복하면 Checkbox가 InvalidCastException을 던져서 'System.String'을 'System.Windows.Forms.CheckBox'유형과 연결할 수 없다는 메시지가 표시됩니다.

나는이 문제를 쉽게 해결할 수 있지만 나는 그 루프에 많은 코드를 가지고 있기 때문에 each/next 루프를 사용하고 싶다. (그리고 With는 사용할 수 없다.) 항상 객체에 직접 poiting하는 것은 내가 피하고 싶고 정말로 필요한 코드이다. 가능한 한 간단합니다.

나는 실제로 어느 오후에 이것을 보냈지 만 어떤 대답도 찾을 수 없었다.

답변

8

CheckedListBoxCheckBox 컨트롤 집합이 아닙니다.
래퍼 개체 모음이 없습니다.

CheckedListBox 컨트롤은 항목의 일반 목록 만 표시 할 수있는 간단한 컨트롤입니다. 당신이 뭔가 더 강력한 것을 찾는 것처럼 들리는군요. 예를 들어 소유자 드로잉이없는 개별 항목의 배경색을 변경하는 것은 불가능합니다.

ListView (CheckBoxes 속성을 true로 설정)을 사용해야합니다.
그런 다음 Items 컬렉션의 ListViewItem 인스턴스를 반복 할 수 있습니다.

+0

예,하지만 CheckedListBox는 충분히 강력하지 않습니다. – SLaks

+0

실제로 알아낼 부분은 많지 않습니다. 당신이 얻고있는 객체는리스트에 추가 한 실제 객체입니다 (귀하의 경우에는 내가 믿는 문자열). 그것을 위해 만들어진 "목록 항목"이 아닙니다. 개별 항목을 시각적으로 사용자 정의하려면 소유자가 그린 목록 상자를 코딩해야하며 이는 또 다른 교훈입니다. – Ishmaeel

1
For Each item In SuppliersCheckList.CheckedItems 
     If SuppliersCheckList.GetItemCheckState(SuppliersCheckList.Items.IndexOf(item)) Then 
      MsgBox(item.ToString) 
     End If 
Next 
관련 문제