ฉันใช้ตัวตั้งเวลาเพื่อแก้ปัญหานี้ เปิดใช้งานตัวจับเวลาผ่านเหตุการณ์ ItemCheck ดำเนินการในกิจกรรม Timer's Tick
วิธีนี้ใช้งานได้ไม่ว่าจะตรวจสอบรายการผ่านการคลิกเมาส์หรือโดยการกด Space-Bar เราจะใช้ประโยชน์จากข้อเท็จจริงที่ว่ารายการที่เพิ่งตรวจสอบ (หรือยกเลิกการเลือก) นั้นเป็นรายการที่เลือกเสมอ
ช่วงเวลาของตัวจับเวลาสามารถต่ำได้ถึง 1 เมื่อถึงเวลาที่เหตุการณ์ Tick ขึ้นสถานะการตรวจสอบใหม่จะถูกตั้งค่า
รหัส VB.NET นี้แสดงแนวคิด มีหลายรูปแบบที่คุณสามารถใช้ คุณอาจต้องการเพิ่มช่วงเวลาของตัวจับเวลาเพื่อให้ผู้ใช้เปลี่ยนสถานะการตรวจสอบในหลาย ๆ รายการก่อนที่จะดำเนินการ จากนั้นในเหตุการณ์ Tick ให้สร้างรายการตามลำดับของรายการทั้งหมดในรายการหรือใช้คอลเล็กชัน CheckedItems เพื่อดำเนินการที่เหมาะสม
นั่นเป็นเหตุผลที่เราปิดตัวจับเวลาในเหตุการณ์ ItemCheck ก่อน ปิดการใช้งานจากนั้นเปิดใช้งานทำให้ช่วงเวลา Interval เริ่มต้นใหม่
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()