2012-02-11 10 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

あなたはリストの検索を検討しましたか? –

+0

質問はほとんど意味がない、ユーザーはリストに項目を追加または削除することはできません。では、List <>とリストボックスには同じ値が含まれていません。異なるコードにする必要があります。リストボックス内の項目のインデックスはList <> –

+0

@ HansPassantと同じインデックスです - 'categories'は' clBCategory'でチェックできる値のサブセットのみを含むように意図されていますアプリケーションの起動時にのみ考慮されます(デフォルトのリストなど)。 –

答えて

2

CheckedListBoxは基本的にobjectオブジェクトのloosly型指定されたコレクションです。以下のコードはかなり荒いですが、あなたが軌道に乗るために十分でなければなりません:

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

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

ありがとう!上記のようにリストを初期化していないのは、次のようなものです: リストカテゴリ= controller.FindCategoiesByRecipe(rNumber); しかし、私のような未来の初心者のために、このように赤い方が簡単だろうと思った! もう一度おねがいします! – stinaq

関連する問題