2011-12-28 7 views
0

私はVS2010にいくつかのチェックボックスリストを持つ小さなプログラムを持っています。私はC#「Check All」エントリを表示せずにCheckedListBoxからすべてをチェック

private void CheckedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) 
    { 
     if (e.NewValue == CheckState.Checked) 
     { 
      Applications.Add(CheckedListBox1.Items[e.Index].ToString()); 
     } 
     else if (e.NewValue == CheckState.Unchecked) 
     { 
      Applications.Remove(CheckedListBox1.Items[e.Index].ToString()); 
     } 
    } 

private void CheckedListBox1_SelectedIndexChanged(object sender, EventArgs e) 
    { 

     if (CheckedListBox1.SelectedIndex == 0) 
     { 
      for (int i = 1; i < CheckedListBox1.Items.Count; i++) 
      { 
       CheckedListBox1.SetItemChecked(i, CheckedListBox1.GetItemChecked(0)); 
      } 
     } 
     else 
     { 
      if (!CheckedListBox1.GetItemChecked(CheckedListBox1.SelectedIndex)) 
      { 
       CheckedListBox1.SetItemChecked(0, false); 
      } 
     } 

    } 

問題は、これがまた、出力に「すべてを選択」チェックボックスを置くです...ユーザーはすべてのリストのいずれかで選択できるようにしたかったし、このループ構造を思い付きました。最初のチェックボックス(「Select All」チェック)を含まないようにループを微調整する方法はありますか?これは別の方法で行うべきでしょうか?

+0

あなたのご質問はありますか? –

答えて

1

"出力に"何を意味するかわかりません。 SelectedIndexChangedイベントを使用することはあまり適切ではないため、ItemCheckイベントはアイテムをチェックします。代わりにこれを試してみてください:

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) { 
     if (e.Index == 0) { 
      for (int item = 1; item < checkedListBox1.Items.Count; item++) { 
       checkedListBox1.SetItemChecked(item, true); 
      } 
      e.NewValue = CheckState.Unchecked; // Prevent "Check All" from getting checked 
     } 
    } 

あなたはまだ確認されて得るからアイテムを防ぐために、このイベントハンドラを保つその後、とにかくのSelectedIndexChanged使用したい場合。

+0

申し訳ありませんが、私はitemcheckイベントを含めるべきでした。これを示すためにサンプルコードを編集しました。出力はリストコレクションに格納され、次に異なるクラスを使用して電子メールで送信されます。 – 2boolORNOT2bool

+0

これは完璧です!私はSelectIndexChangedを取り出し、このコードをItemCheckEventに追加しました。これは絶対に完璧に機能します。本当にありがとう。私は非常に新しく、しばらくの間これに固執しています。再度、感謝します! – 2boolORNOT2bool

関連する問題