2010-07-12 16 views
8

Ich habe eine Winforms App in C# mit einem ListView-Steuerelement. Diese ListView zeigt eine Liste von TO-DO-Elementen und ich verwende das 'ItemSelectionChanged'-Ereignis, um Updates zu verarbeiten.Listview ItemSelectionChanged wird zweimal ausgelöst?

Das Problem ist, dass das Ereignis "ItemSelectionChanged" zweimal ausgelöst wird, wenn ich versuche, ein Update durchzuführen.

Das ItemSelectionChanged-Ereignis aktualisiert das Formular, um die Aktualisierungen darzustellen (dh das Element aus der Liste zu entfernen).

Gibt es eine Möglichkeit, das Ereignis nach dem Refresh zu deaktivieren?

UPDATE1:

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) 
    { 
     if (e.IsSelected) 
     {     
      listView1.Items[e.ItemIndex].Remove(); 

      listView1.SelectedIndices.Clear(); 
      listView1.Focus(); 

      listView1.Update(); 
     } 
     else 
     { 

     } 

    } 

Antwort

10

Auffrischen beendet hat, es wird zweimal feuern. Einmal, weil das zuvor ausgewählte Element für das neu ausgewählte Element wieder deaktiviert wurde. Sie müssen nur sicherstellen, dass Sie das Auswahlereignis sehen:

+0

danke, aber die IsSelected hat nicht für mich funktioniert. Es muss noch etwas an meinem Code geben, damit er zweimal ausgelöst wird. –

+0

Nein, es wird definitiv zweimal feuern. Das ist Absicht. Der Punkt ist, den zu entdecken, an dem Sie interessiert sind. Was aus Ihrer Frage nicht klar ist. –

1

Ja gerade die Eventhandler zu Beginn des Refresh entfernen und erneut hinzufügen, nachdem es ja

dh

// Remove handler 
listView1.ItemSelectionChanged -= new ListViewItemSelectionChangedEventHandler(listView1_ItemSelectionChanged); 

// Do refresh 

// Add again 
listView1.ItemSelectionChanged += new ListViewItemSelectionChangedEventHandler(listView1_ItemSelectionChanged); 
+0

Benötige ich weitere Referenzen für die 'OnSelectionChanged'? –

+1

Nein, Sie müssen nur ListView durch den Namen Ihres ListViewControl ersetzen, dh ListView1 und MethodName sollten der Name der Funktion sein, die beim Auslösen des OnSelectionChanged-Ereignisses aufgerufen wird, dh ListView1_OnSelectionChanged, wobei ListView1 wiederum der Name Ihres ListViewControls ist – w69rdy

+0

Für mich der "OnSelectionChanged" wird in Intellisense nicht angezeigt. –

0

Ich denke, Sie müssen manuell das Element am Ende Ihres Handlers abwählen.

listView1.SelectedItem = null;

Verwandte Themen