2010-08-27 2 views
5

J'ai une petite application WinForms C# 3.5 sur laquelle je travaille qui récupère les noms des journaux d'événements d'un serveur dans une liste. Lorsque l'un de ces éléments est sélectionné, un autre listview est rempli avec les entrées du journal des événements du journal des événements sélectionné en utilisant l'événement SelectedIndexChanged en saisissant la propriété text du 1er élément de la collection SelectedItems comme indiqué ci-dessous. Cela fonctionne bien la première fois, mais une deuxième sélection d'un nom de journal d'événements de la première liste échoue. Qu'est-ce qui se passe est la collection SelectedItems que l'événement SelectedIndexChanged obtient est vide, donc je reçois une ArgumentOutOfRangeException.ListView SelectedIndexChanged Événement no Éléments sélectionnés problème

Je suis à perte. Des idées sur ce que je fais mal ou une meilleure façon de le faire?

Répondre

12

Oui, la raison en est que lorsque vous sélectionnez un autre élément, le ListView désélectionne SelectedItem avant de sélectionner le nouvel élément, de sorte que le nombre passe de 1 à 0 puis à 1 à nouveau. Une façon de le réparer serait de vérifier que la collection SelectedItems contient un élément avant de l'utiliser. La façon dont vous le faites est bien, il vous suffit de prendre cela en considération

par exemple

if (listView1.SelectedItems.Count == 1) 
{ 
    string logToGet = listView1.SelectedItems[0].Text; 
} 
1

Vous devez vérifier que la collecte SelectedItems a des valeurs qu'il contient avant d'essayer de récupérer les valeurs de celle-ci.

Quelque chose comme:

if(listView1.SelectedItems.Count > 0) 
    //Do your stuff here 
0

Lorsque vous sélectionnez un nouvel élément, l'élément précédent est désélectionné en premier. Enveloppez votre code lors d'une vérification rapide:

if(listView1.SelectedItems.Count > 0) 
{ 
string logToGet = listView1.SelectedItems[0].Text; 
} 

Ceci ignorera les éléments sélectionnés ne correspondant à aucun élément sélectionné.

Questions connexes