2012-02-11 52 views
1

我有一個checkedListBox(c#),並希望在打開窗口時檢查其中的一些框。我有一個包含值的List<string>,如果列表中的值與CheckedListBox中的值相同,我希望它被檢查!從預定義的字符串列表中選中CheckedListBox中的框

我可以得到所有的盒子來檢查自己,但在接下來的部分有麻煩。如何檢查列表框中的值是否等於列表中的任何值?

這是我到目前爲止有:

//List of all the strings that I want to check 
List<string> categories = new List<string>(); 
categories.Add("Cat 1"); 
categories.Add("Cat 2"); 
categories.Add("Cat 2"); 

//clBCategory is the CheckedListBox 
for (int i = 0; i < clBCategory.Items.Count; i++) 
    { 
      clBCategory.SetItemChecked(i, true); 
    } 
+0

您是否考慮搜索清單? – 2012-02-11 17:25:51

+0

這個問題毫無意義,用戶無法從列表中添加或刪除項目。那麼,List <>和列表框永遠*不*包含相同的值,除非您編寫代碼使它們不同。列表框中項目的索引與它在列表中的索引相同<> – 2012-02-11 17:55:13

+0

@HansPassant - 我認爲'categories'只能包含可能在'clBCategory'中檢查的值的一個子集,只在應用程序啓動時考慮(如默認列表)。 – 2012-02-11 18:02:25

回答

2

CheckedListBox基本上object對象的鬆耦合類型集合。下面的代碼是很粗糙,但應該足以讓你去:

List<string> categories = new List<sting>(); 
categories.Add("Cat 1"); 
categories.Add("Cat 2"); 
categories.Add("Cat 3"); 

for (int i = 0; i < clBCategory.Items.Count; i++) 
{ 
    if (categories.Contains(clBCategory.Items[i].ToString())) 
     clBCategory.SetItemChecked(i, true); 
} 
+0

謝謝,完美無缺! – stinaq 2012-02-12 08:46:53

0

1)你可以做這樣的事情,

 List<string> categories = new List<sting>(); 
     categories.Add("Cat 1"); 
     categories.Add("Cat 2"); 
     categories.Add("Cat 3"); 
     int index; 

     //Instead of traversing checkedListBox1 I have traversed List 
     foreach (string str in list) 
     { 
     index = checkedListBox1.Items.IndexOf(str); 
     if (index < 0) continue; 
     if (str == checkedListBox1.Items[index].ToString()) 
     { 
     checkedListBox1.SetItemChecked(index, true); 
     } 
     } 

我已經測試它和它的作品完美的罰款:)

2)進一步,我會建議你使用集合初始化這樣

 list = new List<string>() {"Cat 1","Cat 2","Cat 9"}; 
+0

謝謝!我實際上並沒有像上面寫的那樣初始化列表,它是這樣的: List categories = controller.FindCategoiesByRecipe(rNumber); 但我認爲這樣做會更容易,對於像我這樣的未來新手來說! 再次感謝! – stinaq 2012-02-12 08:48:33

相關問題