【原創】C# 大量移除容器內控制項的問題 迴圈移除控制項

來源:互聯網
上載者:User

  故事的起因:因為需要在每次載入表單時,刪除掉以前遺留的控制項(控制項為動態產生),故寫下如下方法

            private void RemoveAllBut(Control comtrol)          {            for (int i = 0; i <comtrol.Controls.Count; i++)            {                Control con=comtrol.Controls[i];                  if (con is SimpleButton)      //判斷控制項是否為simpleButton 控制項 這是一個DEV控制項 相當於Button                {
comtrol.Controls.RemoveAt(i);
} } }

 代碼是沒有問題的,但是每次執行完成後只會刪除其中的一半控制項,且是跳著刪除的(刪除控制項1 3 5 7……)

然調試後發現 Controls.RemoveAt 之後,comtrol.Controls.Count也會發生變化,所以  此時的Controls[i] 也不是上次的Controls[i]的那個控制項了

這樣每次都會隔著一個控制項刪除 

解決辦法  :

 

        private void RemoveAllBut(Control comtrol)          {            for (int i = comtrol.Controls.Count-1; i >=0; i--)  //重點 
{ Control con=comtrol.Controls[i];   if (con is SimpleButton)      //判斷控制項是否為simpleButton 控制項 這是一個DEV控制項 相當於Button { comtrol.Controls.RemoveAt(i); } } }

上面已經標示出 for迴圈的條件變了 這樣就是每次刪除最後一個控制項 就可以解決這個問題

 

最後 可能其他的一些比如字串操作中 也會有這個問題:

    再迴圈刪除一個東西的時候 它的總數會變化,所有索引也就會不可靠,當然 使用一些其他的方法也可以完成,我個人覺得這樣是最簡單的 。

在此記錄 以協助他人和備忘.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.