2016-05-06 55 views
0

我有一個列表視圖有7列。我想在每列添加信息,但是當它從listView到達子項2時,即使我有該子項,我也會得到一個System.ArgumentOutOfRangeExceptionlistview- System.ArgumentOutOfRangeException

任何想法,爲什麼我得到這個錯誤?我試圖尋找它,但我還沒有找到類似的情況。 這是代碼的一部分,我得到這個錯誤:

if (seen == true) 
      listView1.SelectedItems[0].SubItems[2].Tag = "Seen"; 
     else 
      listView1.SelectedItems[0].SubItems[2].Tag = "Not Seen"; 

回答

1

你可能沒有所有這些子項中每個項目。

或者可能沒有選擇任何東西? (請注意,SelectionChanged事件被調用時Item未選擇以及!)

注意,在ListViewItem可以有子項目自己的號碼不管你有多少Columns創建。這些只提供了一個空間來顯示的數據,而不是你可以訪問的插槽,而無需創建SubItems

因此,在我們訪問它之前,我們必須測試它!換句話說:ListView結構是不是2d陣列,而是鋸齒陣列

這可能是一個可能的檢查..:

if (listView1.SelectedItems[0].Count > 0 &&  
    listView1.SelectedItems[0].SubItems.Count > 2) 
    listView1.SelectedItems[0].SubItems[2].Tag = seen ? "Seen" : "Not Seen"; 

..但是你知道你的代碼更優秀,可能會發現在做必要的測試的一個更好的方式..

不要僅僅依靠上的SubItems的數量等於Columns的數量。他們根本不相關,並且或者可能在每個Item中都更大!

+0

好吧,我現在明白了,但爲了訪問這些子項目,我需要更改哪些內容?因爲目的是用數據填充每個字段。謝謝! –

+0

他們必須__exist__,所以你需要每個__create/add__。但也許錯誤是在'SelectedItems [0]'?使用調試器找出哪兩個索引器引發異常! – TaW

相關問題