2012-07-18 68 views
0

我有一個ListViewItemActivate附加到它。通常我會用listview.SelectedItems[0]來獲得觸發事件的ListViewItem如何在ItemActivate事件中獲取ListViewItem

現在我想訂閱SelectedIndexChanged以及這些項目一旦被選中就可以激活。

不幸的是,sender和這兩個事件不會返回它triggred事件影響的項的e(據我知道的!)。

一個解決方法是有一個像lvSelectedItem這樣的字段,並在其中存儲活動項目...但我怎麼能做到這一點更好的方式?不知何故,我可以直接從發件人或eventargs獲取選定的項目?

這裏是我的代碼:

private void lvPins_ItemActivate(object sender, EventArgs e) 
    { 
     var item = lvPins.SelectedItems[0]; 
     var pin = item.Tag as Pin; 
     OnPinActivated(pin); 
    } 

    private void lvPins_SelectedIndexChanged(object sender, System.EventArgs e) 
    { 
     var item = lvPins.SelectedItems[0]; //this always cause argumentoutofrange exceotion 
     var pin = item.Tag as Pin; 
     OnPinActivated(pin); 
    } 
+0

看我的回答更新 – eyossi 2012-07-18 21:40:45

回答

2

SelectedIndexChangedMSDN documentation

要確定哪些項目在ListView控件中選擇,使用selectedItems屬性來訪問ListView.SelectedListViewItemCollection

您無法從事件參數中訪問新的選定項目/項目。

如果您不希望保留到ListView一個參考,你可以使用sender訪問它:

((ListView)sender).SelectedItems 

UPDATE根據張貼代碼:

我認爲, SelectedIndexChanged被激發兩次:

  • 將舊選定項目移除到SelectedItems列表(然後你會得到一個空列表)
  • 當添加新選定的項目Selecteditems名單(第二次,你會得到所選擇的,然後按項目)

試着改變你的代碼是:

if (lvPins.SelectedItems.Count > 0) 
{ 
    var item = lvPins.SelectedItems[0]; //the second time you will get the selected item here 
    var pin = item.Tag as Pin; 
    OnPinActivated(pin); 
} 
+0

我加了我的代碼也許你可以看看 – 2012-07-18 21:30:18

相關問題