Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ListView CheckedItems按名称查找项目_C#_Winforms_Listview - Fatal编程技术网

C# 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,您正在创建一个未添加到列表视图的新项目(

我需要检查ListView的CheckedItems集合中是否存在具有特定名称的项

到目前为止,我已经尝试:

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);