直接進入主題,困惑了一下午了。
要實現的功能:
winform的checkedlistbox控件
點擊 “全部” 就都選上,可是如果點擊過快就會出現如上現象,下面選項未顯示選中。
代碼如下:
private void clbSaleDept_SelectedIndexChanged(object sender, EventArgs e) { CheckedListBox cb = sender as CheckedListBox; if (cb == null || cb.SelectedIndex < 0) { return; } //如果單擊“全選” if (cb.SelectedIndex == 0) { for (int i = 1; i < cb.Items.Count; i++) { Console.WriteLine(cb.GetItemChecked(0)); cb.SetItemChecked(i, cb.GetItemChecked(0)); } } else { if (!cb.GetItemChecked(cb.SelectedIndex)) {//當其它選項有一項未選中,則取消“全選” cb.SetItemChecked(0, false); } else if (!cb.GetItemChecked(0) && cb.SelectedItems.Count >= (cb.Items.Count - 1)) {//當其它所有選中,則選中“全選” cb.SetItemChecked(0, true); } } }
個人在代碼里面看不出什么問題。
經過寫日志得出:在快速點擊“全選”按鈕時,並不是每次都進入該事件。
答案找到了:
如果點擊過快窗體會認為是雙擊事件,所以在雙擊事件里面再調用一次單擊事件。