2014-07-07 55 views
-1

我有一個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 Gets a collection containing all items in the control. Error: The best overloaded method match for 'System.Windows.Forms.ListView.ListViewItemCoIIection.Remove(System.Windows.Forms.ListViewItem)' has some invalid arguments

+0

請張貼錯誤。 –

+0

這裏是錯誤 http://gyazo.com/3fe429b1dec07c94b998f5c8f0d11f66 – Victornor

+3

請在問題中包含錯誤。如果你打算向互聯網上的隨機陌生人尋求幫助,如果你不強迫他們在外部網站上查看更多細節,那就好了。此外,如果該父親有史以來的問題變得無用。 –

回答

0

嘗試在此之前找到的listItem:

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); 
    } 
    } 
} 
+0

沒有錯誤,但客戶端沒有被刪除:/ – Victornor

+0

@Qube:你在哪裏在你的代碼中調用你的RemoveClientList? – christof13

+0

true,因爲我忘記添加listView1.Refresh();刪除 –

1

嘗試使用RemoveByKey而不是Remove

原因是您正在添加項目,使用一種基於提供的字符串自動創建項目的方法。

使用remove,您需要指定哪個項目,而不是指定用於命名項目的字符串。

對於RemoveByKey,鍵是使用的名稱,可以將其解析爲用於添加/創建列表項的相同名稱。

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

0

Remove方法接受一個ListViewItem的作爲參數不是字符串。你必須調用刪除方法

public void RemoveFromClientList(string ClientName) 
{ 

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

}