从 tabPage 中删除控件

Deleting controls from a tabPage

我正在尝试删除运行时在 tabPage 上创建的按钮。我做了一个函数,它应该遍历该 tabPage 上的所有控件,但由于某种原因,每次调用时只删除了一半的按钮。 (页面上有8个按钮,我要全部删除)

foreach(var ctr in tabControl.SelectedTab.Controls)
{
    if (ctr is Button)
    {
        if (ctr is Button) { tabControl.SelectedTab.Controls.Remove((Button)ctr); }
    }
}

我什至尝试了以下操作,但遇到了同样的问题,

for (int i = 0; i < 8; i++)
    {
        tabControl.SelectedTab.Controls.Remove(
         ((Button)tabControl.SelectedTab.Controls[i]));
    }

但是,当我尝试调试时,它只识别在 tabPage 上创建的第 1、3、5 和 7 个按钮,并且只删除它们,留下 4 个。如果我尝试第二次,它再次出现删除一半,留下 2。我按如下方式初始化每个按钮。

for (int i = 0; i < 8; i++)
    {
        tempButton[i] = new Button();
        tabControl.SelectedTab.Controls.Add(tempButton[i]);
        tempButton[i].AutoSize = true;
        tempButton[i].Location = new System.Drawing.Point(
                   100 + (150 * (i % 4)), 175 + (175 * (int)(.25 * i)));
        //tempButton[i].Name = "tempButton" + i.ToString();
        tempButton[i].Text = names[i];
        tempButton[i].Size = new System.Drawing.Size(35, 13);
        tempButton[i].TabIndex = i;
    }

当您删除 Controls[i] 时,下一次 Controls[i] 已更改,因为第二个按钮可能是删除按钮后的第一个按钮。

您可能会尝试获取所有按钮并将其保存到临时集合中,而不是直接使用 SelectedTab.Controls[i]:

引用它们
var buttons = tabControl.SelectedTab.Controls.OfType<Button>()
for (int i = 0; i < buttons.Count; i++) {
   tabControl.SelectedTab.Controls.Remove(buttons[i]);
}

顺便说一句:您可以考虑通过更改 Visible 属性.

来隐藏这些按钮