我正在使用的是
string proj = listView2.SelectedItems[0].ToString();
捕获我选择的listview项目的项目,这在第一个工作正常,当我点击另一个listview项目时它会抛出
的例外InvalidArgument =值'0'对'index'无效。 参数名称:index
有什么想法吗?
private void listView2_SelectedIndexChanged(object sender, EventArgs e)
{
string proj = listView2.SelectedItems[0].ToString();
}
工作:
string proj ="";
ListView.SelectedListViewItemCollection lv2si =
this.listView2.SelectedItems;
foreach (ListViewItem item in lv2si)
{
proj = item.ToString();
}
答案 0 :(得分:1)
如果在listview中没有选择任何项目怎么办?该集合将包含零项,它将抛出此异常。
相反,获取ListViewItemCollection并使用foreach迭代它。如MSDN示例中所述: ListView.SelectedListViewItemCollection breakfast = this.ListView1.SelectedItems;
double price = 0.0;
foreach ( ListViewItem item in breakfast )
{
price += Double.Parse(item.SubItems[1].Text);
}
http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.selecteditems.aspx
答案 1 :(得分:1)
在访问索引值之前,您应该测试索引值是否有效。
private void listView2_SelectedIndexChanged(object sender, EventArgs e)
{
string proj;
if (listView2.SelectedItems.Count > 0)
proj = listView2.SelectedItems[0].ToString();
else
proj = string.Empty;
}
答案 2 :(得分:1)
只要Selected
的{{1}}属性发生更改,就会引发SelectedIndexChanged
事件。这意味着事件被引发两次:一次取消选择第一个项目,第二次选择您单击的项目。由于您没有检查ListViewItem
是否有任何项目,因此您在第一次提出事件时会收到异常。
正如@Jeffrey L Whitledge在答案中所示,您可以使用SelectedItems
来确定是否选择了任何项目。