我有一个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)' 有一些无效的论点
答案 0 :(得分:1)
尝试使用RemoveByKey
代替Remove
。
原因是您要根据提供的字符串使用自动创建项目的方法添加项目。
使用remove,您需要指定哪个项目,而不是用于命名项目的字符串。
对于RemoveByKey,键是使用的名称,可以解析为与添加/创建列表项相同的名称。
答案 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);
}
}
}