J'utilise une minuterie pour résoudre ce problème. Activez le minuteur via l'événement ItemCheck. Agissez dans l'événement Timer's Tick.
Cela fonctionne que l'élément soit vérifié via un clic de souris ou en appuyant sur la barre d'espace. Nous profiterons du fait que l'élément qui vient d'être coché (ou non coché) est toujours l'élément sélectionné.
L'intervalle de la minuterie peut être aussi bas que 1. Au moment où l'événement Tick est déclenché, le nouvel état Vérifié sera défini.
Ce code VB.NET montre le concept. Il existe de nombreuses variantes que vous pouvez utiliser. Vous souhaiterez peut-être augmenter l'intervalle du minuteur pour permettre à l'utilisateur de modifier l'état de vérification de plusieurs éléments avant d'agir. Ensuite, dans l'événement Tick, effectuez un passage séquentiel de tous les éléments de la liste ou utilisez sa collection CheckedItems pour prendre les mesures appropriées.
C'est pourquoi nous désactivons d'abord le minuteur dans l'événement ItemCheck. Désactiver puis Activer entraîne le redémarrage de la période d'intervalle.
Private Sub ckl_ItemCheck(ByVal sender As Object, _
ByVal e As System.Windows.Forms.ItemCheckEventArgs) _
Handles ckl.ItemCheck
tmr.Enabled = False
tmr.Enabled = True
End Sub
Private Sub tmr_Tick(ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles tmr.Tick
tmr.Enabled = False
Debug.Write(ckl.SelectedIndex)
Debug.Write(": ")
Debug.WriteLine(ckl.GetItemChecked(ckl.SelectedIndex).ToString)
End Sub
if not item = checkedListBox1.Items[e.Index].ToString()