2010-11-30 3 views
1

Ce que je passe est j'utiliseListView exception chaîne lancée

string proj = listView2.SelectedItems[0].ToString(); 

pour capturer l'élément de mon élément listview sélectionné, cela fonctionne très bien la première autour, quand je clique sur un autre élément listview il jeter l'exception de

InvalidArgument = La valeur '0' n'est pas valide pour 'index'. Nom du paramètre: index

Des pensées?

private void listView2_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string proj = listView2.SelectedItems[0].ToString(); 
    } 

travail:

 string proj =""; 
     ListView.SelectedListViewItemCollection lv2si = 
     this.listView2.SelectedItems; 

     foreach (ListViewItem item in lv2si) 
     { 
      proj = item.ToString(); 
     } 

Répondre

1

si aucun élément est sélectionné dans listview? La collection contiendra zéro élément et lancera cette exception. Au lieu de cela, obtenez ListViewItemCollection et utilisez foreach pour effectuer une itération sur ce dernier. Comme décrit dans l'exemple 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

Vous devez tester que la valeur d'index est valide avant d'y accéder.

private void listView2_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    string proj; 
    if (listView2.SelectedItems.Count > 0) 
     proj = listView2.SelectedItems[0].ToString(); 
    else 
     proj = string.Empty; 
} 
1

L'événement SelectedIndexChanged est soulevée chaque fois que la propriété d'un SelectedListViewItem changements. Cela signifie que l'événement est déclenché deux fois: une fois lorsque le premier élément est désélectionné et une deuxième fois lorsque l'élément sur lequel vous avez cliqué est sélectionné. Puisque vous ne vérifiez pas si SelectedItems contient des éléments, vous obtenez l'exception la première fois que l'événement est déclenché. Comme @Jeffrey L Whitledge montre dans sa réponse, vous pouvez utiliser SelectedItems.Count pour déterminer si des éléments sont sélectionnés.

Questions connexes