2009-05-03 4 views
1

J'ai un problème, j'utilise la méthode listview ListView.SelectedItems [0] pour retourner le ListViewItem actuellement sélectionné dans un argument dans une fonction qui affiche le texte de l'article dans une zone de texte lorsqu'il est sélectionné. Cette méthode est définie sur l'événement Listview_SelectedIndexChanged. Le problème est que lorsque je choisi un élément différent maintenant, après déjà la sélection précédemment une, une erreur se qui lit,C#: Problème lors de la sélection de différents éléments après l'utilisation de ListView.SelectedItems [0]

ArgumentOutOfRangeException était non gérée InvalidArgument = Valeur « 0 » est pas valide pour « index » nom paramater: index

Pourquoi provoque-t-il cette erreur lorsque je veux renvoyer le prochain élément sélectionné de ma liste? Cela ne se produit qu'après avoir sélectionné un autre élément après en avoir préalablement sélectionné un.

Voici l'événement:

private void lvMyItems_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     // Return currently selected item. 
     ShowItem(lvMyItems.SelectedItems[0]); // The error occurs here. 
    } 

Et est la méthode ici qu'il appelle:

private void ShowItem(ListViewItem MyItem) 
    { 
     // This method inputs the text and subitem text of my listview item into two textboxes. 
     txtItemName.Text = MyItem.Text; 
     txtItemNickName.Text = MyItem.SubItems[1].Text; 
    } 

Répondre

4

"Pas de sélection" est aussi un état possible. Assurez-vous que SelectedItems.Count >= 1 avant d'accéder à l'élément à l'index 0.

+0

Vous monsieur êtes un génie. Merci pour la solution que vous avez fournie. –

+0

Cela a fonctionné pour moi aussi souffrant du même problème mais je ne sais pas pourquoi? L'événement se déclenche-t-il trop rapidement avant que l'état de la sélection ait changé? – IbrarMumtaz

1

Je vois ce problème se produire lorsque je clique sur un élément pour la deuxième fois.

Le premier clic fonctionne correctement, mais le deuxième clic entraîne une exception. Je pense que c'est parce que lorsque nous cliquons sur un autre élément, le programme efface le "statut de sélection" pour le premier élément, et marque le second élément comme "sélectionné". Avant de marquer le second élément comme "sélectionné", le programme sera dans la condition où il n'y a pas d'élément de sélection dans ListView, ce qui est (très probablement) pourquoi le programme génère alors une exception.

Nous avons donc besoin de vérifier que le SelectedItems.Count >= 1

Questions connexes