2010-08-27 12 views
5

Ich habe eine kleine C# 3.5 WinForms App, an der ich arbeite, die die Ereignisprotokollnamen von einem Server in eine Listview packt. Wenn eines dieser Elemente ausgewählt ist, wird eine andere Listenansicht mit den Ereignisprotokolleinträgen aus dem ausgewählten Ereignisprotokoll mit dem SelectedIndexChanged-Ereignis gefüllt, indem die Texteigenschaft des ersten Elements in der SelectedItems-Auflistung wie unten gezeigt erfasst wird.ListView SelectedIndexChanged Event no Ausgewähltes Items Problem

Dies funktioniert beim ersten Mal, aber eine zweite Auswahl eines Ereignisprotokollnamens aus der ersten Listview schlägt fehl. Was passiert, ist die SelectedItems-Auflistung, die das SelectedIndexChanged-Ereignis abruft, ist leer, daher erhalte ich eine ArgumentOutOfRangeException.

Ich bin ratlos. Irgendwelche Ideen darüber, was ich falsch mache oder einen besseren Weg, dies zu tun?

Antwort

12

Ja, der Grund ist, dass wenn Sie ein anderes Element auswählen, das ListView das SelectedItem vor dem Auswählen des neuen Elements abliest, so dass die Anzahl von 1 bis 0 und dann wieder auf 1 gehen wird. Eine Möglichkeit, dies zu beheben, besteht darin, zu überprüfen, ob die SelectedItems-Auflistung ein Element enthält, bevor Sie es versuchen und verwenden. Die Art und Weise Sie tun es in Ordnung ist, müssen Sie nur diese berücksichtigen

zB

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

Sie sollten prüfen, ob die SelectedItems Sammlung Werte in sich hat, bevor Sie versuchen, Werte von es abzurufen.

Etwas wie:

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

Wenn Sie ein neues Element auszuwählen, ist der vorherige Punkt nicht ausgewählten ersten. Wickeln Sie Ihren Code in eine schnelle Überprüfung ein:

Dies ignoriert ausgewählte Elemente, die sich zu keinem ausgewählten Element ändern.