Utilizo un temporizador para resolver este problema. Habilite el temporizador a través del evento ItemCheck. Actúa en el evento Timer's Tick.
Esto funciona ya sea que el elemento se verifique mediante un clic del mouse o presionando la barra espaciadora. Aprovecharemos el hecho de que el elemento recién marcado (o desmarcado) es siempre el elemento seleccionado.
El intervalo del temporizador puede ser tan bajo como 1. Para cuando se active el evento Tick, se establecerá el nuevo estado Checked.
Este código VB.NET muestra el concepto. Hay muchas variaciones que puede emplear. Es posible que desee aumentar el intervalo del temporizador para permitir que el usuario cambie el estado de verificación en varios elementos antes de tomar medidas. Luego, en el evento Tick, haga un pase secuencial de todos los elementos de la lista o use su colección CheckedItems para tomar la acción apropiada.
Es por eso que primero deshabilitamos el temporizador en el evento ItemCheck. Desactivar y luego Activar hace que el período de intervalo se reinicie.
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()