/ / Perché compare un evento di visualizzazione listview che indica che l'elemento selezionato è deselezionato dopo l'aggiunta - c #, .net, winforms, listview

Perché listview fire event che indica che l'elemento selezionato è deselezionato dopo l'aggiunta - c #, .net, winforms, listview

Sto aggiungendo oggetti ad un listview (c # winforms app) tramite il seguente codice:

var IT = new ListViewItem(Term);
IT.Checked = true;
MyListView.Items.Add(IT);

Tuttavia, subito dopo aver aggiunto l'articolo, ricevo un evento che indica che l'oggetto non è stato controllato (e.Item.Checked è falso).

Quindi ricevo un evento successivo che indica che è stato controllato (e.Item.Checked è true).

Perché sto ricevendo il primo evento? La proprietà selezionata è impostata su false per qualche motivo quando aggiungo l'elemento all'elenco? Sembra strano dato che sto impostando lo stato selezionato su true prima di aggiungerlo al mio evento.

Qualsiasi aiuto molto apprezzato. Grazie in anticipo.

risposte:

14 per risposta № 1

Sembra che quando ogni CheckBox di ListViewItem viene aggiunto a ListView, viene inizialmente impostato come non selezionato che attiva l'evento ItemChecked.

Nel tuo caso il CheckBox viene quindi impostato come verificato per corrispondere IT.Checked = true; che spara di nuovo l'evento.

Questo sembra essere di progettazione e non credo che esista un metodo per fermare questi eventi dall'accensione al carico.

Una soluzione (anche se un po 'un trucco) sarebbe di controllare il FocusedItem proprietà di ListView, poiché è null fino a quando non viene caricato ListView e mantiene un riferimento a un ListItem lì dopo.

void listView1_ItemChecked(object sender, ItemCheckedEventArgs e)
{
if (listView1.FocusedItem != null)
{
//Do something
}
}

Spero che questo ti aiuti.