2012-06-21 33 views
0

我正在努力與ListViews一段時間...我正在寫一個程序,我不能在這裏複製(它有637行長)...基本上我試圖刪除選定的行一個ListView ...但是如果ListView的大小足以顯示一個滾動條,它會對該程序進行打亂,說明「沒有爲對象實例設置對象引用」,但它實際上並沒有完全崩潰,但它顯示了一個醜陋的JIT調試窗口。 我知道這個問題與ListView的大小有關,因爲如果我只是試圖用一個活動的滾動條刪除ListView的任何項目,我會得到崩潰,但是如果我只是調整窗口的大小以足以禁用滾動條(即足夠大,所以一切都將適合和滾動條不會是必要的,因此係統不會成爲一個),一切正常工作! 我懷疑這可能是.NET plataform的一些內部錯誤....任何想法?我已經嘗試了各種代碼刪除選定的項目,他們每一個都有這個相同的錯誤,但我通過將所有ListView複製到一個數組,並刪除數組中的選定的項目,然後將它們複製回乾淨的ListView ....奇怪,凌亂,醜陋,我知道,但它是唯一可以工作的代碼...但現在我得到了同樣的錯誤,但是隻有在安裝程序之後,這是當我在Visual Studio中運行程序時,不會發生這種情況!)C# - ListView空異常

編輯: 刪除代碼是(註釋部分是我以前嘗試過的所有代碼,並且在同一個錯誤中失敗....這個只在istalled時崩潰,不在Visual Studio 2010中... Framework是.NET 4.0):

private void limparLinhasSelecionadas() 
     { 
      if (listView1.Items.Count > 0 && limpando == false) 
      { 
       limpando = true; 
       int i = 0; 

       //for (i = listView1.Items.Count - 1; i >= 0 ; i--) 
       //{ 
        //if (listView1.Items[i].Selected == true) 
        //{ 
        // listView1.Items[i].Remove();      
        //} 

       //}    
       //////for (i = listView1.SelectedIndices.Count - 1; i >= 0; i--) 
       //////{ 
       ////// listView1.Items[listView1.SelectedIndices[i]].Remove(); 
       //////} 
       //foreach (ListViewItem item in listView1.SelectedItems) 
       //{ 
       // listView1.Items.Remove(item); 
       //} 

       ArrayList itens = new ArrayList(); 

       foreach (ListViewItem item in listView1.Items) 
       { 
        itens.Add(item); 
       } 

       foreach (ListViewItem item in listView1.SelectedItems) 
       { 
        itens.Remove(item);      
       } 

       listView1.Items.Clear(); 

       foreach (ListViewItem item in itens) 
       { 
        listView1.Items.Add((ListViewItem)item.Clone()); 
       } 

       //for (i = 0; i < itens.Count; i ++) 
       //{      
       // ListViewItem item = new ListViewItem((itens[i] as ListViewItem).Text); 

       // for (j = 1; j < (itens[i] as ListViewItem).SubItems.Count; j++) 
       // { 
       //  item.SubItems.Add((itens[i] as ListViewItem).SubItems[j].Text);      
       // } 
       // listView1.Items.Add(item); 
       //} 

       for (i = 0; i < listView1.Items.Count; i++) 
       { 
        listView1.Items[i].Text = "Passe " + (i + 1).ToString(); 
       } 

       ////ListView listView = new ListView(); 

       ////int j = 0; 

       ////for (i = 0; i < listView1.Items.Count; i++) 
       ////{ 
       //// //listView.Items.Add(listView1.Items[i]); 
       //// for (j = 0; j < listView1.Items[i].SubItems.Count; j++) 
       //// { 
       ////  listView.Items[i].SubItems.Add(listView1.Items[i].SubItems[j].Text); 
       //// } 
       ////} 

       ////listView1.Items.Clear(); 

       ////for (i = 0; i < listView.Items.Count; i++) 
       ////{ 
       //// listView1.Items.Add(listView.Items[i].Clone() as ListViewItem); 
       ////} 

       //foreach (ListViewItem item in listViewCollection) 
       //{ 
       // listView1.Items.Add(item.Clone() as ListViewItem); 
       //} 

       SetWindowTheme(listView1.Handle, "Explorer", null); 
       limpando = false; 
      } 

      // SetWindowTheme(listView1.Handle, "Explorer", null); 
     } 
+5

顯示您刪除所選項目的代碼 – eyossi

+0

您能編輯您的代碼以包含相關部分併發布它嗎? Yourpostishardtoread。 –

+0

考慮在你的列表視圖中應用分頁,它將解決你的所有問題 – Talha

回答

1

如果你只是想從列表視圖中刪除選定的項目,這段代碼將工作。

foreach (ListViewItem item in listView1.SelectedItems) 
{ 
    listView1.Items.Remove(item); 
} 
+0

如果你看我的代碼和筆記,我已經試過這個代碼......它的評論是因爲它沒有工作......當ListView增長並出現滾動條時,當我刪除某個項目時,程序崩潰......這是我遇到的一個老問題,當時有一個「幽靈」項目,在位置大於項目本身的集合,並且當代碼嘗試着看它時,它就崩潰了。這就是爲什麼我放置所有評論代碼,他們都是「沒有工作」的代碼。 爲了解決這個問題,我將ListView複製到一個數組並從數組中刪除,然後我將它複製回來......就像我之前已經解釋的那樣。 – mFeinstein

+0

我做了一個測試項目並測試它,它工作。我添加了100個項目並從該列表中的任何地方移除,沒有問題。我懷疑你的問題在別的地方。 – Stig

+0

你有任何其他參考列表中的項目? – Stig