Tôi sử dụng Bộ hẹn giờ để giải quyết vấn đề này. Bật bộ đếm thời gian thông qua sự kiện ItemCheck. Thực hiện hành động trong sự kiện Ticker của bộ hẹn giờ.
Điều này hoạt động cho dù mục được kiểm tra thông qua một cú nhấp chuột hoặc bằng cách nhấn phím cách. Chúng tôi sẽ tận dụng lợi thế của thực tế là mặt hàng vừa được chọn (hoặc chưa được chọn) luôn là Mặt hàng đã chọn.
Khoảng thời gian của Bộ hẹn giờ có thể thấp đến 1. Vào thời điểm sự kiện Đánh dấu được nâng lên, trạng thái Đã kiểm tra mới sẽ được thiết lập.
Mã VB.NET này hiển thị khái niệm. Có nhiều biến thể bạn có thể sử dụng. Bạn có thể muốn tăng Khoảng thời gian của bộ hẹn giờ để cho phép người dùng thay đổi trạng thái kiểm tra trên một số mục trước khi thực hiện hành động. Sau đó, trong sự kiện Đánh dấu, hãy thực hiện tuần tự tất cả các Mục trong Danh sách hoặc sử dụng bộ sưu tập CheckedItems của nó để thực hiện hành động thích hợp.
Đó là lý do tại sao trước tiên chúng tôi vô hiệu hóa Bộ hẹn giờ trong sự kiện ItemCheck. Tắt rồi Bật làm cho Khoảng thời gian bắt đầu lại.
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()