2011-08-17 15 views
10

Ho un ListView con un paio di elementi in esso. Quando ListView perde lo stato attivo, l'ultimo oggetto ListViewItem è ancora "selezionato" con uno sfondo grigio.
Mi piacerebbe farlo su ListView.FocusLost, la selezione è scomparsa e quindi si verificherà l'evento ListView.SelectedIndexChanged.
Qualche idea?Come posso deselezionare la voce in ListView?

Sto usando .NET CF 3.5.

+0

Modificato, ora ho ricevuto la tua frase. – Vladimir

risposta

16

Supponiamo di accedere a ListView da un modulo/controllo padre.

È possibile aggiungere questo pezzo di codice nell'evento costruttore/carico del/di controllo del modulo:

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

Ok, quindi nel tuo caso, si dovrebbe sostituire quella delegato 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; 
    } 

È può dare al codice una forma più bella, btw.

+1

SelectedIndices non ha un metodo 'Clear()', almeno non nel framework compatto 3.5. – Zeemee

+0

@Mulmoth vedere le modifiche – Vladimir

+0

Grande - grazie! – Zeemee

1

questo è più facile.

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

non c'è una proprietà SelectedIndex per listview –

+0

Questo funziona per Windows 10 applicazioni universali. +1 – JBernardo

1

Un altro modo efficace per affrontare questo sarebbe:

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

'ListViewItem' non contiene una definizione per 'Selected' e nessun metodo di estensione 'Selected' che accetta un primo argomento di tipo 'ListViewItem' può essere trovato – Choletski

+0

@Choletski Sono sicuro @Jeff ment 'i.IsSelected = false ; 'invece di' i.Selected = false; '. – Jogge

3
myListView.SelectedItems.Clear(); 
2

So che questo è in ritardo, ma nel caso in cui qualcun altro necessario alla soluzione vorrei aggiungere alla soluzione.

È necessario impostare la proprietà Focused su false per evitare che gli elementi deselezionati abbiano lo stato attivo.

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 domanda aveva già una risposta 5 anni fa. E la tua soluzione non risolve il problema: stai semplicemente deselezionando il primo elemento nell'elenco. –

0

Se si utilizza EditItemTemplate, piuttosto che ItemTemplate, che potrebbe essere stato cercando di capire il motivo per cui ListView1.SelectedIndex = -1; non ha funzionato È perché è necessario utilizzare ListView1.EditIndex = -1;

Problemi correlati