Bu sorunu çözmek için bir Zamanlayıcı kullanıyorum. Zamanlayıcıyı ItemCheck olayı aracılığıyla etkinleştirin. Timer's Tick olayında harekete geçin.
Bu, öğenin bir fare tıklamasıyla veya Boşluk Çubuğuna basarak kontrol edilip edilmediğini gösterir. Yeni kontrol edilen (veya kontrol edilmeyen) öğenin her zaman Seçili Öğe olması gerçeğinden yararlanacağız.
Zamanlayıcının Aralığı 1 kadar düşük olabilir. Tick olayı ortaya çıktığında, yeni Kontrol Edildi durumu ayarlanacaktır.
Bu VB.NET kodu kavramı gösterir. Kullanabileceğiniz birçok varyasyon var. Kullanıcının işlem yapmadan önce birkaç öğe üzerindeki kontrol durumunu değiştirmesine izin vermek için Zamanlayıcı Aralığını artırmak isteyebilirsiniz. Ardından, Tick olayında, Listedeki tüm Öğeler için sıralı geçiş yapın veya uygun eylemi gerçekleştirmek için CheckedItems koleksiyonunu kullanın.
Bu yüzden ilk olarak ItemCheck olayında Timer'ı devre dışı bırakıyoruz. Devre Dışı Bırak ve Etkinleştir, Aralık döneminin yeniden başlamasına neden olur.
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()