Tôi sử dụng Bộ hẹn giờ để giải quyết vấn đề này. Bật bộ hẹn giờ thông qua sự kiện ItemCheck. Thực hiện hành động trong sự kiện Tick của Timer.
Điều này hoạt động cho dù mục được kiểm tra qua nhấp chuột hay bằng cách nhấn Space-Bar.Chúng tôi sẽ tận dụng lợi thế của thực tế là mục vừa kiểm tra (hoặc bỏ chọn) luôn là mục được chọn.
Khoảng thời gian của người lập lịch có thể thấp nhất 1. Khi thời gian sự kiện Tick được nâng lên, trạng thái Đã kiểm tra mới sẽ được đặt.
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 Timer để 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 Tick, thực hiện một pass tuần tự của 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ó để có hành động thích hợp.
Đó là lý do tại sao trước tiên chúng tôi tắt Bộ hẹn giờ trong sự kiện ItemCheck. Tắt rồi bật Bật sẽ làm cho khoảng thời gian 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
Nguồn
2015-04-10 20:29:51
trong đầu tiên cho mỗi, chúng ta có thể cần phải thêm một nếu điều kiện .. 'if not item = checkedListBox1.Items [e.Index]. ToString()' – emaillenin
Vấn đề là sự kiện ItemCheck là f ired trước khi kiểm tra được xử lý. Giải pháp của bạn sẽ liên quan đến việc giữ danh sách của riêng bạn, về cơ bản nhân đôi mã tiêu chuẩn. Đề xuất đầu tiên của Dunc (thực thi trì hoãn trên ItemCheck) là imo câu trả lời rõ ràng nhất cho câu hỏi của phq, bởi vì nó không yêu cầu bất kỳ xử lý bổ sung nào. –