按字符串删除listview项

时间:2014-07-07 11:51:02

标签: c# listview

我有一个Listview,我在其中添加了所有连接的客户端。

当我只知道名字时,如何从Listview删除客户端?

要将客户端添加到Listview我使用此代码:

public void AddToClientList(string ClientName)
{
    if (InvokeRequired)
        Invoke((MethodInvoker)delegate() { listView1.Items.Add(ClientName); });
    else
        listView1.Items.Add(ClientName);
}

但是当我尝试删除时,我收到了错误:

public void RemoveFromClientList(string ClientName)
{
    if (InvokeRequired){
        Invoke((MethodInvoker)delegate() { listView1.Items.Remove(ClientName); });
    }
    else{
        listView1.Items.Remove(ClientName);
}}

我在listview1.items.remove(clientname)

上收到此错误
  

ListView.ListViewItemCoIIection ListView.Items获取一个集合   包含控件中的所有项目。错误:最好的重载   方法匹配   ' System.Windows.Forms.ListView.ListViewItemCoIIection.Remove(System.Windows.Forms.ListViewItem)'   有一些无效的论点

4 个答案:

答案 0 :(得分:1)

尝试使用RemoveByKey代替Remove

原因是您要根据提供的字符串使用自动创建项目的方法添加项目。

使用remove,您需要指定哪个项目,而不是用于命名项目的字符串。

对于RemoveByKey,键是使用的名称,可以解析为与添加/创建列表项相同的名称。

查看更多: http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.listviewitemcollection.removebykey(v=vs.110).aspx

答案 1 :(得分:0)

Remove方法接受listViewItem作为参数而不是字符串。您必须在调用Remove方法

之前找到listItem
 public void RemoveFromClientList(string ClientName)
{

        var toRemove =listView1.Items.Find(ClientName);
        if (toRemove != null)
        {
           listView1.Items.Remove(toRemove);
        }

}

答案 2 :(得分:0)

试试这个:

public void RemoveFromClientList(string ClientName)
{
    ListViewItem listviewitem = new ListViewItem();
    listviewitem .Name = ClientName;
    if (InvokeRequired)
    {
        Invoke((MethodInvoker)delegate() { listView1.Items.Remove(listviewitem ); });
    }
    else{
            listView1.Items.Remove(listviewitem );
    }
}

编辑1:

public ListViewItem GetItemtoDelete(string ClientName )
{
       ListViewItem listviewitem=new ListViewItem();
       for (int i=0;i<listView1.Items.Count;i++)
        {
            listviewitem=listView1.Items[i];
            if (ClientName == listviewitem.Text)
             {
                  return listviewitem;
             }
        }
       return null;
}


public void RemoveFromClientList(string ClientName)
{
    ListViewItem listviewitem = new ListViewItem();
    listviewitem =GetItemtoDelete(ClientName );
    if(listviewitem !=null)
    {
         if (InvokeRequired)
         {
               Invoke((MethodInvoker)delegate() { listView1.Items.Remove(listviewitem ); });
         }
         else
         {
               listView1.Items.Remove(listviewitem );
    }
    }
}

答案 3 :(得分:0)

我不知道这是否行得通,但这是我用来从列表视图中删除临时文件时删除的代码。

if (listView1.Items.Count > 0)
        {
            foreach (ListViewItem item in listView1.Items)
            {
                string delete = "~$";
                if (item.Text.Contains(delete))
                {
                    listView1.Items.Remove(item);
                }
            }
        }