2012-10-25 15 views
7

Bir Windows formu Uygulaması üzerinde çalışıyorum. Kontrol kutucuğundaki tüm onay kutularını check/uncheck istiyorum.Winforms Checkedlistbox içindeki tüm öğelerin kontrol edilen durumunu programlı olarak nasıl belirlerim?

Denetim kutularını dinamik olarak oluşturmak için aşağıdaki kodu kullanıyorum.

var CheckCollection = new List<CheckedBoxFiller>(); 
    foreach (DataRow dr in dt.Rows) 
     CheckCollection.Add(new CheckedBoxFiller { 
           Text = dr["ImageName"].ToString(), 
           Value = dr["ImageId"].ToString() 
     }); 
    chklbEvidenceTags.DataSource = CheckCollection; 
    chklbEvidenceTags.DisplayMember = "Text"; 
    chklbEvidenceTags.ValueMember = "Value"; 

Ve bu

private class CheckedBoxFiller { 
    public string Text { get; set; } 
    public string Value { get; set; } 
} 

Şimdi check/Uncheckall checkboxes istiyorum CheckboxFiller sınıf olduğunu. Bunu nasıl başarabilirim?

Herhangi bir yardım yararlı olabilir.

+0

Win checkedboxlist nedir? Ve senin sınıfın iki dizgi özellikleri var - nerede bool? – JleruOHeP

+0

@JleruOHeP, Hataya dikkat çekmek için teşekkürler. Üzgünüz CheckedListbox yerine checkedboxList yazdım. Üçüncü mülkiyeti oraya koyardım. ancak bu özelliği kullanarak onay kutusunu işaretleyin/işaretini kaldırın (boole işaretli)? – Hardik

cevap

14

Çözüm buldum.

for (int i = 0; i < chklistbox.Items.Count; i++) 
     chklistbox.SetItemCheckState(i, (state ? CheckState.Checked : CheckState.Unchecked)); 

state

boolen değerdir.

+1

Burada 'state' tanımladığınız sadece 'bool' olarak tanımlayın ve 'true' olarak varsayılan değer verin? – Neo

8

Büyük Öğeler listeniz varsa, bu yaklaşım öğesinin öğelerinin işaretini kaldırarak daha etkili olabilir.

private void UncheckAllItems() 
    { 
     while (chklistbox.CheckedIndices.Count > 0) 
      chklistbox.SetItemChecked(chklistbox.CheckedIndices[0], false); 
    } 

Ve projeniz boyunca birden fazla CheckedListBox denetimlerini kullanın ve bir adım daha ileri götürmek istiyorsa, o bir uzantısı yöntemi olarak eklenebilir: Aslında kontrol edilir öğeler arasında size sadece döngüsü gerektirir

public static class AppExtensions 
    { 
     public static void UncheckAllItems(this System.Windows.Forms.CheckedListBox clb) 
     { 
      while (clb.CheckedIndices.Count > 0) 
       clb.SetItemChecked(clb.CheckedIndices[0], false); 
     } 
    } 

Uzatma yöntemi çağrı:

chklistbox.UncheckAllItems(); 
-3

/işaretini kaldırın tüm ListItems aşağıda kod Do kontrol etmek için:

boolean state =false;//False->Uncheck,true->Check 

for (int i = 0; i < chklistbox.Items.Count; i++) 
     chklistbox.SetItemCheckState(i, (state ? CheckState.Checked : CheckState.Unchecked)); 
+1

Hardik zaten aynı cevabı yayınladı – SK2185

0

İşaretle/kod aşağıda yazılı tüm liste öğeleri:

if (checkBox1.Checked) 
    { 
     for (int i = 0; i < chkboxlst.Items.Count; i++) 
     { 
      chkboxlst.SetItemChecked(i, true); 
     } 
    } 
    else 
    { 
     for (int i = 0; i < chkboxlst.Items.Count; i++) 
     { 
      chkboxlst.SetItemChecked(i, false); 
     } 
    } 
İlgili konular