2011-07-11 35 views
5

Tôi đang gặp sự cố khi sự kiện SelectedValueChanged() trên ComboBox đang được kích hoạt trong khi tải ứng dụng Biểu mẫu Windows của tôi. Hiện tại, tôi cũng có một sự kiện Form_Load() đang tải một số ComboBoxes, bao gồm cả OleDbDataAdapters/DataTables/Fill(), v.v.SelectedValueChange() bắn sự kiện trong khi tải biểu mẫu trong ứng dụng Biểu mẫu Windows

Tôi giả định rằng vì phương thức Form_Load() của tôi, sự kiện SelectedValueChanged đang được kích hoạt do dữ liệu của ComboBox đang được lấp đầy.

Tại sao điều này lại xảy ra?

+0

Nếu bạn không muốn sự kiện này được nâng lên trong thời gian bắt đầu, tại sao không đăng ký cho sự kiện này sau khi tất cả các hình thức khởi tạo của bạn đã diễn ra? –

Trả lời

4

Trong biểu mẫu Tải sự kiện trước khi tải các mục vào comboBox, hãy hủy đăng ký sự kiện. Sau khi dữ liệu ràng buộc đăng ký lại sự kiện.

Form_Load(..) 
{ 
    _comboBoxName.SelectedValueChanged -= _comboBoxName_SelectedValueChanged; 

    // Load data to the combo box... 

    _comboBoxName.SelectedValueChanged += _comboBoxName_SelectedValueChanged; 
} 
+0

Tuyệt vời! Điều này là rất tốt, cảm ơn bạn. –

+0

@ James Durman: Tuyệt vời, đừng quên chọn câu trả lời cho câu hỏi của bạn. – CharithJ

+0

@James: nếu câu trả lời này giải quyết được vấn đề của bạn, đừng quên đánh dấu nó là đúng – Grace

3

Sự kiện này có thể đã bị kích hoạt do dữ liệu được điền lần đầu tiên trong số ComboBox. Bản sửa lỗi được đề xuất tốt nhất là đăng ký các sự kiện sau khi các điều khiển đã được khởi tạo.

Khắc phục đơn giản khác là gán cờ boolean khi Biểu mẫu đã tải xong. Cờ này có thể được sử dụng để bỏ qua mọi cuộc gọi đến sự kiện của bạn cho đến khi biểu mẫu được tải (ví dụ: FormLoaded = true).

+0

Tôi đã nghĩ rằng đây có thể là trường hợp! Cảm ơn bạn. –

0
rbtalldivision_CheckedChanged(sender, e); 
rbtAllSitecodes_CheckedChanged(sender, e); 

Đối callling nhiều sự kiện trong các cửa sổ ứng dụng nên làm việc đó

Các vấn đề liên quan