2010-03-24 10 views
9

Mam wcześniej zaznaczone pole CheckedListBox. Chcę zapętlić z "dla każdego/następnego" poprzez wszystkie elementy w CheckedListBox i zrobić dużo "stuff" z każdym elementem iteracji checklistbox.Dla każdego <item> w CheckedListBox. <item> zwraca jako Object, a nie jako Control

przykładowy kod:

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 

problemem jest to, że jest 'Object' typ, a nie 'Kontrola' typ. Jeśli wymuszam iterację var As CheckBox, zgłaszany jest wyjątek InvalidCastException, który mówi, że typ "System.String" nie może być powiązany z typem "System.Windows.Forms.CheckBox"

Wiem, że mogę z łatwością obejść to, ale Chcę użyć a dla każdej/następnej pętli, ponieważ mam dużo kodu w tej pętli (i With nie może być używana) i zawsze poiting bezpośrednio do obiektu jest czymś, czego chciałbym uniknąć i naprawdę potrzebuję kodu, aby być Tak proste, jak to możliwe.

Właściwie spędziłem jedno popołudnie szukając tego, ale nie mogłem znaleźć żadnej odpowiedzi.

Odpowiedz

8

A CheckedListBox nie jest zbiorem elementów sterujących CheckBox.
Nie ma kolekcji obiektów opakowania.

Kontrolka CheckedListBox to prosty element sterujący, który może wyświetlać tylko zwykłą listę elementów; brzmi, jakbyś szukał czegoś potężniejszego. (Na przykład nie można zmienić koloru tła pojedynczego elementu bez rysunku właściciela).

Zamiast tego należy użyć wartości ListView (z ustawieniem właściwości CheckBoxes na wartość true).
Następnie można przechodzić przez instancje ListViewItem w kolekcji Items.

+0

Tak, ale CheckedListBox nie jest wystarczająco wydajny dla Ciebie. – SLaks

+0

Niewiele, żeby to rozgryźć. Obiekt, który otrzymujesz, to rzeczywisty obiekt dodany do listy (w twoim przypadku ciąg znaków, który uważam). Nie "element listy" stworzony dla niego. Wizualne dostosowanie poszczególnych elementów wymagałoby zakodowania listbox-a sporządzonego przez właściciela, co byłoby zupełnie inną lekcją. – Ishmaeel

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