2010-03-24 17 views
9

Daha önce doldurulmuş bir CheckedListBox sahibim. CheckedListBox'taki tüm öğeler için "her/sonraki için" ile döngü yapmak ve kontrol listesi kutusunun her yineleme öğesiyle çok fazla "malzeme" yapmak istiyorum.CheckedListBox'taki her <item> için. <item>, nesne olarak değil, Denetim olarak değil

örnek 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 

problemi şudur 'Object' tipi değil, bir 'Denetim' türü olmasıdır. Yineleme var As CheckBox zorlarsa, bu 'System.Windows.Forms.CheckBox' türüyle ilişkilendirilemez bir InvalidCastException atarsa, 'System.Windows.Forms.CheckBox'

Bu konuda kolayca çalışabilirim biliyorum Her bir/sonraki döngü için kullanmak istiyorum çünkü bu döngüde çok fazla kod var (ve Kullanılamıyor) ve her zaman doğrudan nesneye yönelmek kaçınmak istediğim bir şey ve gerçekten de olabildiğince basit.

Aslında bir öğleden sonra bunu arıyordum ama herhangi bir cevap bulamadım.

cevap

8

CheckedListBoxCheckBox denetimlerinin bir koleksiyonu değildir.
Bir sarıcı nesnesi koleksiyonu yok.

CheckedListBox denetimi, yalnızca düz bir öğe listesi görüntüleyebilen basit bir denetimdir; Daha güçlü bir şey aradığına benziyor. (Örneğin, tek tek bir öğenin arka plan rengini sahip olmaksızın değiştirmek imkansızdır)

Bunun yerine ListView (CheckBoxes özelliği true olarak ayarlanmış) kullanmalısınız.
Daha sonra Items koleksiyonundaki ListViewItem örneklerinde geçiş yapabilirsiniz.

+0

Evet, ancak CheckedListBox sizin için yeterince güçlü değil. – SLaks

+0

Aslında anlamayacak kadar fazla değil. Aldığınız nesne, listeye eklediğiniz gerçek nesnedir (sizin durumunuza göre, inanıyorum). Bunun için oluşturulan "liste öğesi" değil. Bireysel öğeleri görsel olarak kişiselleştirmek, sahipli bir liste kutusu kodlamasını gerektirir; bu, başka bir derstir. – Ishmaeel

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