uso un temporizador para resolver este problema. Habilite el temporizador mediante el evento ItemCheck. Actúa en el evento Timer's Tick.
Esto funciona si el elemento se comprueba con un clic del mouse o presionando la barra espaciadora.Aprovecharemos el hecho de que el artículo que acaba de marcarse (o no) siempre es el Elemento seleccionado.
El intervalo del temporizador puede ser tan bajo como 1. Para cuando se produce el evento Tick, se establece el nuevo estado comprobado.
Este código de VB.NET muestra el concepto. Hay muchas variaciones que puede emplear. Es posible que desee aumentar el intervalo del temporizador para permitir al usuario cambiar 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 en la lista o use su colección CheckedItems para tomar las medidas apropiadas.
Es por eso que primero desactivamos el temporizador en el evento ItemCheck. Desactivar y Activar hace que el período de intervalo vuelva a iniciarse.
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
en el primero para cada uno, podríamos necesitar agregar una condición if .. 'if not item = checkedListBox1.Items [e.Index] .ToString()' – emaillenin
El problema es que el evento ItemCheck es f antes de que se procese el cheque. Su solución implicaría mantener su propia lista, esencialmente duplicando el código estándar. La primera sugerencia de Dunc (ejecución retrasada en ItemCheck) es la respuesta más clara a la pregunta de phq, ya que no requiere ningún manejo adicional. –