2011-08-17 14 views
10

Tengo un ListView con un par de elementos. Cuando el ListView pierde el foco, el último ListViewItem seleccionado todavía está "seleccionado" con un fondo gris.
Me gustaría lograr eso en ListView.FocusLost, la selección se ha ido y, por lo tanto, se producirá el evento ListView.SelectedIndexChanged.
¿Alguna idea?¿Cómo puedo deseleccionar el elemento en ListView?

Estoy usando .NET CF 3.5.

+0

Editado, ahora recibí su oración. – Vladimir

Respuesta

16

Supongamos que está accediendo al ListView desde un formulario/control principal.

Puede agregar este fragmento de código en el evento constructor/carga del/de control de la forma:

this.myListView.LostFocus += (s, e) => this.myListView.SelectedIndices.Clear(); 

Ok, por lo que en su caso, que sustituiría a que el delegado con:

if (this.myListView.SelectedIndices.Count > 0) 
    for (int i = 0; i < this.myListView.SelectedIndices.Count; i++) 
    { 
     this.myListView.Items[this.myListView.SelectedIndices[i]].Selected = false; 
    } 

Usted puede dar al código una forma más agradable, por cierto.

+1

SelectedIndices no tiene un método 'Clear()', al menos no en el marco compacto 3.5. – Zeemee

+0

@Mulmoth ver las ediciones – Vladimir

+0

Genial, ¡gracias! – Zeemee

1

esto es más fácil.

this.myListView.SelectedIndex = -1; 
this.myListView.Update(); 
+2

no hay propiedad SelectedIndex para listview –

+0

Esto funciona para las aplicaciones universales de Windows 10. +1 – JBernardo

1

Otra manera efectiva de abordar esto sería:

foreach (ListViewItem i in myListView.SelectedItems) 
{ 
    i.Selected = false; 
} 
+0

'ListViewItem' no contiene una definición para 'Seleccionado' y no se puede encontrar ningún método de extensión 'Seleccionado' que acepte un primer argumento de tipo 'ListViewItem' – Choletski

+0

@Choletski Estoy seguro @Jeffment 'i.IsSelected = false ; 'en lugar de' i.Selected = false; '. – Jogge

3
myListView.SelectedItems.Clear(); 
2

Sé que es tarde, pero en caso de que alguien más se necesita la solución me gustaría añadir a la solución.

Debe establecer la propiedad Enfocado en falso para evitar que los elementos no seleccionados tengan el foco.

for (int i = 0; i < this.myListView.SelectedIndices.Count; i++) 
{ 
    this.myListView.Items[this.myListView.SelectedIndices[i]].Selected = false; 
    this.myListView.Items[this.myListView.SelectedIndices[i]].Focused = false; 
} 
-1
if (listView1.SelectedItems.Count > 0) 
    for (int i = 0; i < listView1.SelectedItems.Count; i++) 
    { 
     listView1.SelectedItems[i].Selected = false; 
    } 
+0

La pregunta ya fue respondida hace 5 años. Y su solución no resuelve el problema; solo está deseleccionando el primer elemento de la lista. –

0

Si está utilizando EditItemTemplate, en lugar de ItemTemplate, que puede haber estado tratando de averiguar por qué ListView1.SelectedIndex = -1; no ha estado funcionando. Es porque necesita usar ListView1.EditIndex = -1;

Cuestiones relacionadas