簡體   English   中英

Foreach跳過對usercontrol的控制

[英]Foreach skipping a control on usercontrol

我有一個帶有面板的用戶控件,名為panel1。 我在設計器視圖中添加了它。 從組合框中選擇一個選項后,在這種情況下,我向用戶控件添加了兩個標簽( mainAspects有兩個字符串):

private void CreateLabelsForMainAspetcs(List<string> mainAspects)
    {
        int mainCount;
        int firstLabelX;
        int firstLabelY;
        int addToFirstLabelY = 0;

        mainCount = mainAspects.Count;
        firstLabelX = 22;
        firstLabelY = 149;

        for (int i = 0; i < mainCount; i++)
        {
                Label mainAsp = new Label();
                mainAsp.Text = mainAspects[i];
                mainAsp.Location = new Point(firstLabelX, firstLabelY + addToFirstLabelY);
                mainAsp.AutoSize = true;
                Controls.Add(mainAsp);
                addToFirstLabelY = addToFirstLabelY + 100;
        }
    }

之后,當用戶從組合框中選擇另一個選項時,我想使用以下代碼處理標簽:

 foreach (Control ctrl in this.Controls)
            {
                if (ctrl is Label)
                    ctrl.Dispose();
            }

並使用CreateLabelsForMainAspetcs(List<string> mainAspects)創建新的。 但是foreach循環在退出后(跳過第二個標簽)僅通過panel1和第一個標簽。

在foreach循環之前,我已經用this.Controls.Count.ToString()檢查了多少控件具有usercontrol:它說,uc有3個控件(通過GetType()函數,我找到了一個面板和兩個標簽-因此它找到了每個控件控制)。

因此,在第二次運行CreateLabelsForMainAspetcs(List<string> mainAspects)之后,沒有3個控件,而是4個控件。 1個面板和3個標簽。

之后,如果我只希望顯示一個標簽:在列表中使用一個字符串運行dispose代碼和createlabel-用戶控件上只有一個標簽,第二個是Disapper。 但是Controls.Count表示有4個控件-1個面板和3個標簽。 您能幫我做錯什么嗎?

我猜想在遍歷Controls集合時對這些標簽進行處理會篡改collection,因此會停止對首次處理的Label進行迭代。

為什么不嘗試將它們添加到List<Label>而不是進行處理。 將所有Label控件添加到列表后,循環瀏覽該列表並將其刪除。

所以,代替

foreach (Control ctrl in this.Controls)
{
    if (ctrl is Label)
        ctrl.Dispose();
}

嘗試

List<Label> labelList = this.Controls.OfType<Label>().ToList();
foreach(Label lbl in labelList)
{
    lbl.Dispose();
}

選項一:可以在控件中使用ListBox:如果可以,則在UC中使用ListBox並在父級中維護一個List,並將UC ListBox.source設置為列表。 當您調整清單時,它會自動更新

選項二創建一個默認視圖(Usercontrol.Clear())過程,首先調用它,然后運行代碼以添加新標簽。 此呼叫可能對用戶不可見,也可以強制清除呼叫

暫無
暫無

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

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