C# .Net의 확인란 컨트롤에 이상한 문제가 있습니다.
아래 코드는 필요한 모든 논리를 보여줍니다. _itemsChecked는 모든 _fixtures가 포함 된 개인 사전이며 진위 또는 거짓 (체크 또는 체크하지 않음)검색 기능이 올바로 검사되지 않는 CheckedListBox
내가 원하는 것은 이전에 체크 된 것을 유지하면서 내 체크리스트를 검색 할 수 있습니다. 선택한 항목이 검색 결과에 포함되어 있으면 해당 항목을 확인해야합니다.
코드가 거의 작동합니다. 그러나 어떤 이유로 박스는 무작위로 여기저기서 검사되며 디버그를 통해 작동하는 것으로 보이지만 화면이 컨트롤로 돌아 오면 작동하지 않습니다.
확실히 나는 아주 간단한 것을 놓치고 있습니다.
내 논리는 다음과 같습니다
데이터 소스이 목록을 통해 입력 된 검색 질의, 으로 반복과 일치 GUID를 사전에 사실 여부를 확인하는 사람들이 포함되어 있습니다. 사실이라면 우리는 그것을 확인 된 것으로 설정합니다.
희망 정보를 제공해 주셨습니다.
미리 감사드립니다.
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;
}
관련 : http://stackoverflow.com/q/4654056/95573 – SwDevMan81
'_itemsChecked.Contains (새 KeyValuePair (((기구) lst.Items [I]) .Guid, true))'- 비효율적 인 것처럼 보입니다. LINQ가 전체 컬렉션을 반복 할 수 있다고 생각합니다. 이것이 "plain".net 사전이라면'bool isUnchecked;를 정의하지 말고 다음을 사용하십시오 :'_itemsChecked.TryGetValue (((Fixture) lst.Items [i]) .Guid, out isUnchecked) && isUnchecked'? –
Jonno
문제를 해결했지만 답변을 전체적으로 게시 할 수있는 경험이 거의 없습니다. 나는 그 월요일에 할거야. selectedItem가 '= ((리스트 박스) 송신기)에 고정하기 .SelectedItem;' 변화 'VAR selectedFixtureItem = lstFixtures.Items [e.Index]기구로서' –