2013-09-03 4 views
3

특정 이름의 항목이 ListView의 CheckedItems 컬렉션에 있는지 확인해야합니다.ListView CheckedItems 이름으로 항목 찾기

은 지금까지 나는 시도했다 :

ListViewItem item = new ListViewItem(itemName); 

if (listView1.CheckedItems.IndexOf(item) >= 0) 
    return true; 

ListViewItem item = new ListViewItem(itemName); 

if (listView1.CheckedItems.Contains(item)) 
    return true; 

일 그 중 어느 것도

. CheckedItems를 반복하지 않고 하나씩 검사하지 않고이를 수행 할 수있는 방법이 있습니까?

답변

1

을 :

+0

위의 LINQ 방법 'i.Name'을'i.Text'로 변경했습니다. 답변을 업데이트하면 동의로 표시됩니다. –

+0

@ Dr.Greenthumb 그것은 당신의 질문에'특별한 이름을 가지고 있습니다 '라고 말했기 때문입니다. 물론'Text'를 뜻한다면'Text'로 바꾸면됩니다. 그렇다면'ContainsKey'는'Text'가 아닌'Name'에 사용되기 때문에 사용할 수 없습니다. –

+0

처음에는 이름으로 찾을 수 있다고 생각했지만 listView1.CheckedItems를 시계에 추가했을 때'name' 매개 변수가 없었습니다. 또한 당신 말이 맞아, 그것을 시도했을 때'ContainsKey'가 작동하지 않았다. –

0

새 기능을 사용하면 listview1.Contains (item)를 사용할 때 목록보기에 추가되지 않고 새 항목이므로 새 항목을 만들 수 있습니다 (새 항목이기 때문에).

항목을 추가 할 때 키/값 쌍을 사용하고 값에 contains를 사용하십시오. 당신은이 목적을 위해 LINQ을 혜택을 누릴 수 있습니다

ListViewItem itemYouAreLookingFor = listView1.FindItemWithText("NameToLookFor"); 

// Did we find a match? 
if (itemYouAreLookingFor != null) 
{ 
    // Yes, so find out if the item is checked or not? 
    if(itemYouAreLookingFor.Checked) 
    { 
     // Yes, it is found and check so do something with item here 
    } 
} 
1

는 newing 최대 ListViewItem을 제거하고 대신이 작업을 수행하기

bool itemChecked = listView1.CheckedItems.OfType<ListViewItem>() 
          .Any(i => i.Text == itemText); 
//You can also retrieve the item with itemText using FirstOrDefault() 
var checkedItem = listView1.CheckedItems.OfType<ListViewItem>() 
             .FirstOrDefault(i=>i.Text == itemText); 
if(checkedItem != null) { //do you work...} 

또한 결정하기 위해 ContainsKey를 사용할 수있는 경우 항목 (이름이 itemName 인 경우) :

bool itemChecked = listView1.CheckedItems.ContainsKey(itemName);