Disabilitare un ListView in C#, ma mostrare ancora la selezione corrente
Domanda
Ho un controllo ListView e sto cercando di capire il modo più semplice/migliore per impedire la modifica delle righe selezionate, senza nascondersi le righe selezionate.
So che c'è un HideSelection
proprietà, ma funziona solo quando il ListView
è ancora abilitato (ma non focalizzato).Ho bisogno che la selezione sia visibile anche quando ListView è disabilitato.
Come posso implementarlo?
Soluzione
Puoi anche far ritirare il proprietario di ListView. Avrai quindi il controllo completo sull'aspetto degli elementi, indipendentemente dal fatto che siano selezionati o meno o se ListView stesso è abilitato o meno. DrawListViewItemEventArgs fornisce un modo per chiedere a ListView di disegnare singole parti dell'elemento in modo da disegnare solo i bit che ti interessano. Ad esempio, puoi disegnare lo sfondo dell'elemento ma lasciarlo su ListView per disegnare il testo.
Altri suggerimenti
Ci sono due opzioni, cambia i colori disabilitati per le righe selezionate. Oppure modifica tutte le altre righe per simulare che sono disabilitate ad eccezione di quella selezionata. La prima opzione è ovviamente la più semplice e la seconda ovviamente avrà bisogno di alcune protezioni extra.
In realtà ho già fatto la prima opzione prima e funziona abbastanza bene. Devi solo ricordare di ripristinare i colori ai valori predefiniti nel caso in cui un'altra riga sia selezionata più avanti nel processo.
Implementa SelectedIndexChanged e fai questo
private void listViewABC_SelectedIndexChanged(object sender, EventArgs e)
{
listViewABC.SelectedItems.Clear();
}