百思不得騎姐的問題——難道是控件的bug?


直接進入主題,困惑了一下午了。

要實現的功能:

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);
                }
            }
        }


個人在代碼里面看不出什么問題。

經過寫日志得出:在快速點擊“全選”按鈕時,並不是每次都進入該事件。

 

答案找到了:

如果點擊過快窗體會認為是雙擊事件,所以在雙擊事件里面再調用一次單擊事件。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM