Domanda

Che cosa è un buon modo per selezionare tutti o seleziona n elementi in un controllo listview senza l'utilizzo di:

foreach (ListViewItem item in listView1.Items)
{
 item.Selected = true;
}

o

foreach (ListViewItem item in listView1.Items)
{
 item.Selected = false;
}

So Win32 sottostante controllo listview comune supporta Messaggio LVM_SETITEMSTATE che è possibile utilizzare per impostare lo stato selezionato, e passando -1 l'indice che si applica a tutti gli elementi.Io preferisco non essere PInvoking messaggi di controllo che sembra essere dietro l' .NET di controllo Listview (non voglio essere un cattivo sviluppatore e si basano su privi di documenti comportamento - per quando si modifica una completamente gestito classe ListView)

Bump

Pseudo Masochista ha il SelectNone caso:

ListView1.SelectedItems.Clear(); 

Ora solo bisogno di SelectAll codice

È stato utile?

Soluzione

Wow questo è un vecchio...:D

SELEZIONA TUTTO

 listView1.BeginUpdate(); 
 foreach (ListViewItem i in listView1.Items)
 {
     i.Selected = true;
 }
 listView1.EndUpdate();

SELEZIONA INVERSO

 listView1.BeginUpdate(); 
 foreach (ListViewItem i in listView1.Items)
 {
     i.Selected = !i.Selected;
 }
 listView1.EndUpdate();

BeginUpdate e EndUpdate sono utilizzati per attivare/disattivare il controllo di ridisegnare mentre il suo contenuto è in fase di aggiornamento...Immagino che sarebbe seleziona tutto più veloce, in quanto sarebbe aggiorna solo una volta, e non listView.Items.Count volte.

Altri suggerimenti

Sia

ListView1.SelectedItems.Clear();

o

ListView1.SelectedIndices.Clear();

dovrebbe fare il trucco per selezionare nessuno, comunque.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top