2010-07-12 25 views
8

Tengo una aplicación de Winforms en C# con un control ListView. Este ListView muestra una lista de elementos TO-DO y estoy usando el evento 'ItemSelectionChanged' para manejar las actualizaciones.Listview ItemSelectionChanged dispara dos veces?

El problema es que el evento 'ItemSelectionChanged' se dispara dos veces cada vez que intento hacer una actualización.

El evento ItemSelectionChanged actualiza el formulario para representar las actualizaciones (es decir, eliminar el elemento de la lista).

¿Hay alguna forma de desactivar el evento después de la actualización?

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 
     { 

     } 

    } 

Respuesta

10

Sí, disparará dos veces. Una vez porque el elemento previamente seleccionado se deseleccionó, nuevamente para el elemento recién seleccionado. Usted sólo tiene que asegurarse de que vea el evento de selección:

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

gracias pero el IsSelected no funcionó para mí. Debe haber algo más sobre mi código que lo mantenga disparando dos veces. –

+0

No, definitivamente disparará dos veces. Esto es por diseño. El punto es detectar el que le interesa. Lo cual no está claro de su pregunta. –

1

Sí basta con retirar el manejador de sucesos en el inicio de la actualización y añadirla de nuevo después de que haya terminado refrescante

es decir

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

// Do refresh 

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

¿Necesito alguna referencia adicional para el 'OnSelectionChanged'? –

+1

No, solo necesita reemplazar ListView con el nombre de su ListViewControl, es decir, ListView1 y MethodName debe ser el nombre de la función que se llama cuando se activa el evento OnSelectionChanged, es decir, ListView1_OnSelectionChanged donde ListView1 es nuevamente el nombre de su ListViewControl – w69rdy

+0

. 'OnSelectionChanged' no aparece en Intellisense. –

0

Creo que se necesita de forma manual anulará la selección en el final de su controlador.

listView1.SelectedItem = null;

Cuestiones relacionadas