C# .Net のチェック ボックス コントロールに奇妙な問題があり
ます。以下のコードは、必要なすべてのロジックを示しています。
私が欲しいのは、以前にチェックされたものを保持しながら、チェックリストを検索できるようにすることです。チェックした項目が検索結果に含まれていたらチェックしてもらいたい。
コードはほぼ機能します。しかし、何らかの理由でボックスがあちこちでランダムにチェックされ、デバッグでは機能しているように見えますが、画面がコントロールに戻ると機能しません。
確かに、非常に単純なものが欠けています。
私の論理は次のとおりです。
DataSource には、型指定された検索クエリに一致するものが含まれます。このリストを繰り返し処理し、辞書で Guid が true かどうかを確認します。true の場合は、チェック済みとして設定します。
十分な情報を提供できたことを願っています。
よろしくお願いします。
private void searchTextBox_KeyUp(object sender, EventArgs e)
{
lst.DataSource = _fixtures
.OrderBy(f =>
f.Description)
.Where(f =>
f.Description.ToLower().Contains(searchFixturesTextBox.Text.ToLower()))
.ToList();
lst.DisplayMember = "Description";
for (var i = 0; i < lst.Items.Count; i++)
if(_itemsChecked.Contains(new KeyValuePair<Guid, bool>(((Fixture)lst.Items[i]).Guid, true)))
lst.SetItemChecked(i, true);
}
void lst_ItemCheck(object sender, ItemCheckEventArgs e)
{
var selectedItem = ((ListBox) sender).SelectedItem as Fixture;
if (selectedFixtureItem != null)
_itemsChecked[selectedItem.Guid] = e.CurrentValue == CheckState.Unchecked;
}