2016-10-06 6 views
1

アイテムをチェックしてからチェックを外すと、コードはまだチェックされていると考えられます。その結果、「Go」をクリックすると、チェックされていない項目も表に表示されます。この場合、Brandonが最初にチェックされ、チェックされませんでした。名前はもはや "チェック"されていませんが、テーブルはそれを引き上げます。C#ボックスがチェックされていなくてもcheckedListBoxのアイテムが選択される

Item still checked

これは私が持っているものです。

string filterstring = ""; 
    private void checkedListBox_ItemCheck(object sender, ItemCheckEventArgs e) 
    { 
     if (e.NewValue == CheckState.Checked) 
      filterstring = "Responsible = '" + checkedListBox.Items[e.Index].ToString() + "' OR"; 
     else 


     if (e.NewValue == CheckState.Unchecked) 
      filterstring = ""; 


     foreach (object itemChecked in checkedListBox.CheckedItems) 
      { 
       filterstring += " Responsible = '" + itemChecked.ToString() + "' OR"; 
      } 
     filterstring = filterstring.Substring(0, filterstring.LastIndexOf("OR")); 
    } 

私は鍵がこのコードの一部であることを疑います。それがなければ、例外がスローされます:

private void checkedListBox_ItemCheck(object sender, ItemCheckEventArgs e) 
    { 
     if (e.NewValue == CheckState.Unchecked) 
      filterstring = ""; 
    } 

助けていただければ幸いです!

答えて

0

の後にチェックされたアイテムのリストはのItemCheckイベントが発生するまで更新されないため、for-eachループは正確なチェック項目を報告していません。 ItemCheckイベントメソッドが呼び出された後に、このコードは、基本的にはすぐに実行されます

this.BeginInvoke(new Action(() => { 
    foreach (var itemChecked in checkedListBox1.CheckedItems) { 
     filterString += itemChecked.ToString(); 
    } 
    })); 

:それを避けるために

は、BeginInvokeメソッド呼び出しを使用しています。

更新:

あなたはSUBSTRINGコード上の例外を取得しているので、このようなあなたのフィルタテキストを作成してみてください:

List<string> filters = new List<string>(); 

void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) { 
    this.BeginInvoke(new Action(() => { 
    filters = new List<string>(); 
    foreach (var itemChecked in checkedListBox1.CheckedItems) { 
     filters.Add("'" + itemChecked.ToString() + "'"); 
    } 
    MessageBox.Show("Responible = " + string.Join(" OR ", filters.ToArray())); 
    })); 
} 
+0

はあなたのラースをありがとうございます。残念ながら、私は例外をスローし続けます。 "mscorlib.dllで 'System.ArgumentOutOfRangeException'型の未処理の例外が発生しました。 追加情報:Lengthはゼロより小さくすることはできません。 –

+0

@ P.CあなたのLastIndexOfラインでそれが起こっているのであれば、それは別の問題です。 LastIndexOfは-1を返しています。これはテキストの長さに使用しています。したがって、kaboomです。 – LarsTech

+0

心配しないで...コードが間違っていました。あなたの答えは最初から正しいものでした。 –

関連する問題