2011-01-05 81 views
1

我有listview與combox =真正containg圖像。每個項目都分配一個標籤。 我可以得到聚焦項目的標籤:獲取ListView項目被檢查

string name = this.lstview1.FocusedItem.Tag.ToString(); 

我可以檢查項目的索引:

list = lstview1.CheckedIndices.Cast<int>().ToList(); 

我如何得到檢查項目的標籤?

回答

2

您可以使用CheckedItems屬性,而不是CheckedIndices

var selectedTags = this.listView1.CheckedItems 
           .Cast<ListViewItem>() 
           .Select(x => x.Tag); 

反正也CheckedIndices可以使用,例如:

var selectedTags = this.listView1.CheckedIndices 
           .Cast<int>() 
           .Select(i => this.listView1.Items[i].Tag); 

編輯:

LINQ Select()的一點解釋:

以下代碼:

var selectedTags = this.listView1.CheckedItems 
           .Cast<ListViewItem>() 
           .Select(x => x.Tag); 
foreach(var tag in selectedTags) 
{ 
    // do some operation using tag 
} 

在功能上等於:

foreach(ListViewItem item in this.listView1.CheckedItems) 
{ 
    var tag = item.Tag; 
    // do some operation using tag 
} 

在該具體例子並不那麼有用,也沒有在碼長的期間短,但是,相信我,在許多情況LINQ真的很有幫助。

+0

什麼表示(i)i =>和(x)x => x.tag – Shahgee 2011-01-05 18:34:35

+0

是'IEnumerable .Select()'中使用的lambda表達式。它是'IEnumerable'的投影,其中的'Select()'被稱爲另一個'IEnumerable'。第一個基本上說:把'CheckedItems'的每個元素(稱爲x)和每個yield'x.Tag'。所以你會得到一個'IEnumerable ',它包含所有對應於'CheckedItems'的標籤。 (希望清楚,英語不是我的第一語言...) – digEmAll 2011-01-05 18:40:55

+0

thanx,讓我試試。 – Shahgee 2011-01-05 18:49:17

0

如何

 

var x = listView1.Items[listView1.CheckedIndices.Cast().ToList().First()].Tag; 
 

+0

Thanx for code.But我怎樣才能爲for循環制作索引。 AS首先總是表示序列的第一個元素。 – Shahgee 2011-01-05 18:47:39