簡體   English   中英

以編程方式刪除控件未按預期工作

[英]Removing Controls programmatically NOT working as expected

我在 tabcontrol 的每個 tabpage 中有 11 個面板,並且想要刪除 10 個面板。 所以我寫了這段代碼:

        var PnlsToRemove = tabControl.SelectedTab.Controls.OfType<Panel>()
            .Where(p => !p.Name.StartsWith("BasePanel"));
        foreach (var pnl in PnlsToRemove)
            pnl.Dispose();

但追蹤后我想知道刪除順序是交替的!
意味着當上面的代碼運行時,只有面板 0、2、4、6、8、10 將被移除,而其他面板將保留。
所以我應該把我的代碼放在一個循環中,像這樣交替刪除面板:

    while (tabControl.SelectedTab.Controls.OfType<Panel>().Count() != 1)
    {
        var PnlsToRemove = tabControl.SelectedTab.Controls.OfType<Panel>()
            .Where(p => !p.Name.StartsWith("BasePanel"));
        foreach (var pnl in PnlsToRemove)
            pnl.Dispose();
    }

在這種情況下(對於 10 個面板)while() 循環 4 次以移除所有面板。

注意:我的所有面板都存在於“PnlsToRemove”中,並且在 foreach 中執行“PnlsToRemove”時會出現此錯誤。

那么,我的代碼有什么問題?
為什么foreach()從下一個面板跳轉?

我想一切都清楚了!

當您從列表中刪除面板時,底層集合正在發生變化,這顯然反映在“foreach”看到的值中。 解決方案是將值存儲到一個新集合中並對其進行迭代。 您應該能夠通過在 PnlsToRemove 的定義中添加“.ToList()”來做到這一點

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM