2010-08-27 57 views
5

我有一個小的C#3.5 WinForms應用程序我正在努力抓住事件日誌名稱從服務器到列表視圖。當選擇其中一個項目時,通過抓取SelectedItems集合中第一個項目的文本屬性,使用SelectedIndexChanged事件從另一個列表視圖中填入選定事件日誌中的事件日誌條目,如下所示。ListView SelectedIndexChanged事件沒有選定的項目問題

string logToGet = listView1.SelectedItems[0].Text; 

這工作正常,但從第一個列表視圖第二次選擇事件日誌名稱失敗。發生的事情是SelectedItems集合中SelectedIndexChanged事件獲取的是空的,所以我得到一個ArgumentOutOfRangeException。

我不知所措。關於我在做什麼錯誤的任何想法或更好的方法來做到這一點?

回答

12

是的,原因是當您選擇另一個項目時,ListView在選擇新項目之前取消選擇SelectedItem,因此計數將從1再次變爲0,然後再次變爲1。解決這個問題的一種方法是在嘗試並使用SelectedItems集合之前檢查它是否包含項目。你正在做的這是很好的方式,你只需要考慮到這一點

if (listView1.SelectedItems.Count == 1) 
{ 
    string logToGet = listView1.SelectedItems[0].Text; 
} 
1

你應該檢查你試圖從中檢索值前SelectedItems集合在它的值。

喜歡的東西:

if(listView1.SelectedItems.Count > 0) 
    //Do your stuff here 
0

當您選擇一個新的項目,原來的項目是未選擇的第一位。在快速檢查中包裝您的代碼:

if(listView1.SelectedItems.Count > 0) 
{ 
string logToGet = listView1.SelectedItems[0].Text; 
} 

這會忽略選定的項目更改爲沒有選定的項目。