Sự kiện SelectedIndexChanged
bị sa thải trong ứng dụng của tôi từ một combo box khi:Phân biệt giữa các sự kiện nêu ra bởi tương tác người dùng và mã của riêng tôi
- người dùng chọn một mục khác nhau trong combo box, hoặc khi:
- mã của riêng tôi cập nhật hộp của hộp tổ hợp để phản ánh rằng hộp tổ hợp hiện đang hiển thị thuộc tính cho một đối tượng khác.
Tôi quan tâm đến sự kiện SelectedIndexChanged
đối với trường hợp 1, để tôi có thể cập nhật các thuộc tính của đối tượng hiện tại. Nhưng trong trường hợp 2, tôi không muốn sự kiện cháy, bởi vì các thuộc tính của đối tượng đã không thay đổi.
Ví dụ có thể hữu ích. Hãy xem xét rằng tôi có một hộp danh sách có chứa một danh sách những người và tôi có một hộp kết hợp đại diện cho quốc tịch của người hiện đang được chọn trong danh sách. Trường hợp 1 có thể xảy ra nếu Fred hiện đang được chọn trong danh sách, và tôi sử dụng hộp kết hợp để thay đổi quốc tịch của mình từ tiếng Anh sang tiếng xứ Wales. Trường hợp 2 có thể xảy ra nếu tôi chọn Bob, người Scotland, trong danh sách. Ở đây, danh sách mã xử lý sự kiện cập nhật danh sách của tôi thấy rằng Bob hiện được chọn và cập nhật hộp kết hợp để Scotland hiện là mục được chọn. Điều này làm cho sự kiện SelectedIndexChanged
của combo box được kích hoạt để thiết lập quốc tịch của Bob cho người Scotland, mặc dù nó đã là người Scotland.
Làm cách nào để cập nhật thuộc tính SelectedItem
của combo box mà không gây ra sự kiện SelectedIndexChanged
để kích hoạt? Một cách sẽ là hủy đăng ký trình xử lý sự kiện, đặt SelectedItem
, sau đó đăng ký lại trình xử lý sự kiện, nhưng điều này có vẻ tẻ nhạt và dễ bị lỗi. Phải có cách tốt hơn.
Tôi có thể cho tôi. Nhưng đây không phải là một chút overkill - "Làm thế nào tôi có thể cập nhật tài sản SelectedItem combo box của tôi mà không gây ra sự kiện SelectedIndexChanged để bắn?" Tôi có thể có phản hồi về giải pháp của mình không? –
Nó có thể là quá mức cần thiết. Đặt cờ hoặc loại bỏ eventhandler là một giải pháp đơn giản hơn, nhưng tôi đã tạo ra SuspendLatch khi tôi nhận ra rằng tôi có nhiều nơi mà tôi muốn tạm dừng sự kiện SelectedIndexChanged –
"Chào mừng một tên tốt hơn" - lớp công khai SuspendThingerMajig? – Juliet