2010-07-12 26 views
8

Bir # ListView denetimi ile C# 'de bir Winforms Uygulaması var. Bu ListView TO-DO öğelerinin listesini gösterir ve güncelleştirmeleri işlemek için 'ItemSelectionChanged' olayını kullanıyorum.Listview ItemSelectionChanged yangınları iki kere mi?

Sorun, her defasında bir güncelleştirme yapmaya çalıştığımda 'ItemSelectionChanged' olayının iki kez patlamasıdır.

ItemSelectionChanged olayı, güncelleştirmeleri (ör. Listeden öğeyi kaldır) temsil etmek için formu yeniler.

Etkinliğin yenilendikten sonra etkinleşmesini devre dışı bırakmanın bir yolu var mı?

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 
     { 

     } 

    } 

cevap

10

Evet ferahlatıcı bittikten sonra yeniden ekleyin, bu iki kez ateş edecek. Bir kez daha önce seçilen öğe tekrar seçildi, yeni seçilen öğe için tekrar seçildi. Az önce seçim olayı görmediğini emin olmalıyız:

private void listView1_ItemSelectionChanged(object sender, ListViewItemSelectionChangedEventArgs e) { 
     if (e.IsSelected) { 
      // Update form 
      //... 
     } 
    } 
+0

teşekkürler ama IsSelected benim için çalışmadı. Kodumun iki kez ateşlenmesini sağlayan başka bir şey olmalı. –

+0

Hayır, kesinlikle iki kez ateş edecek. Bu tasarım gereğidir. Önemli olan, ilgilendiğiniz şeyi tespit etmektir. Bu sizin sorunuzdan net değildir. –

1

Evet sadece yenileme başında EventHandler kaldırmak ve onu

yani

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

// Do refresh 

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

'OnSelectionChanged' için herhangi bir ek başvuruya ihtiyacım var mı? –

+1

Hayır, sadece ListView1, ListView1 ve MethodName ismiyle değiştirmeniz gerekir. OnSelectionChanged olayı tetiklendiğinde çağrılan işlevin adı olmalıdır ListView1_OnSelectionChanged ListView1 öğesinin adı yeniden – w69rdy

+0

ListViewControl'ün adıdır. 'OnSelectionChanged' Intellisense'de görünmüyor. –

0

ben size işleyicisi sonuna öğenin seçimini kaldır elle gerek.

listView1.SelectedItem = null;