C# ListView CheckedItems按名称查找项目
我需要检查ListView的CheckedItems集合中是否存在具有特定名称的项 到目前为止,我已经尝试:C# ListView CheckedItems按名称查找项目,c#,winforms,listview,C#,Winforms,Listview,我需要检查ListView的CheckedItems集合中是否存在具有特定名称的项 到目前为止,我已经尝试: ListViewItem item = new ListViewItem(itemName); if (listView1.CheckedItems.IndexOf(item) >= 0) return true; 及 这两个都不起作用。有没有一种方法可以做到这一点,而不必循环检查CheckedItems并逐个检查它们?使用new,您正在创建一个未添加到列表视图的新项目(
ListViewItem item = new ListViewItem(itemName);
if (listView1.CheckedItems.IndexOf(item) >= 0)
return true;
及
这两个都不起作用。有没有一种方法可以做到这一点,而不必循环检查CheckedItems并逐个检查它们?使用new,您正在创建一个未添加到列表视图的新项目(因为它是新的),因此在使用listView1.Contains(项目)时找不到它
添加项时,请使用键/值对,并在值上使用contains 不要新建一个
ListViewItem
,而是这样做:
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
}
}
为此,您可以受益于
LINQ
:
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...}
当我将
I.Name
更改为I.Text
时,上面的LINQ方法起作用。如果您更新您的答案,我会将其标记为已接受。@Dr.Greenthumb这是因为您在您的问题中说具有特定名称的存在
,当然,如果您的意思是文本
,将其更改为文本
会起作用。如果是这样,ContainsKey
就不能使用,因为它用于Name
而不是Text
。我最初以为可以通过名称找到它,但当我将listView1.CheckedItems添加到手表中时,没有Name
参数。你也是对的,ContainsKey
在我尝试时不起作用。
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...}
bool itemChecked = listView1.CheckedItems.ContainsKey(itemName);