Eu uso um Timer para resolver este problema. Habilite o cronômetro por meio do evento ItemCheck. Tome uma atitude no evento Timer's Tick.
Isso funciona se o item é verificado através de um clique do mouse ou pressionando a barra de espaço. Aproveitaremos o fato de que o item que acabou de ser marcado (ou desmarcado) é sempre o Item selecionado.
O intervalo do temporizador pode ser tão baixo quanto 1. No momento em que o evento Tick é gerado, o novo status Verificado será definido.
Este código VB.NET mostra o conceito. Existem muitas variações que você pode empregar. Você pode querer aumentar o intervalo do temporizador para permitir que o usuário altere o status de verificação em vários itens antes de agir. Em seguida, no evento Tick, faça uma passagem sequencial de todos os itens na lista ou use sua coleção CheckedItems para tomar a ação apropriada.
É por isso que primeiro desabilitamos o Timer no evento ItemCheck. Desativar e Ativar faz com que o período de intervalo seja reiniciado.
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()