C# 从选项卡页删除控件

C# 从选项卡页删除控件,c#,tabpage,C#,Tabpage,我试图删除运行时在选项卡页面上创建的按钮。我创建了一个函数,该函数应该遍历该选项卡页上的所有控件,但由于某些原因,每次调用该函数时,只会删除一半的按钮。(页面上有8个按钮,我希望全部删除) 我甚至试着做了以下几件事,但都遇到了同样的问题 for (int i = 0; i < 8; i++) { tabControl.SelectedTab.Controls.Remove( ((Button)tabControl.SelectedTab.Contr

我试图删除运行时在选项卡页面上创建的按钮。我创建了一个函数,该函数应该遍历该选项卡页上的所有控件,但由于某些原因,每次调用该函数时,只会删除一半的按钮。(页面上有8个按钮,我希望全部删除)

我甚至试着做了以下几件事,但都遇到了同样的问题

for (int i = 0; i < 8; i++)
    {
        tabControl.SelectedTab.Controls.Remove(
         ((Button)tabControl.SelectedTab.Controls[i]));
    }
for(int i=0;i<8;i++)
{
tabControl.SelectedTab.Controls.Remove(
((按钮)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;
    }
for(int i=0;i<8;i++)
{
tempButton[i]=新按钮();
tabControl.SelectedTab.Controls.Add(tempButton[i]);
tempButton[i]。自动调整大小=真;
tempButton[i]。位置=新系统.Drawing.Point(
100+(150*(i%4)),175+(175*(int)(.25*i));
//tempButton[i].Name=“tempButton”+i.ToString();
tempButton[i].Text=名称[i];
tempButton[i]。尺寸=新系统。图纸。尺寸(35,13);
tempButton[i].TabIndex=i;
}

当您移除控件[i]时,下一次控件[i]已经更改,因为第二个按钮可能是移除按钮后的第一个按钮

您可以尝试获取所有按钮并将其保存到临时集合,而不是直接使用SelectedTab引用它们。控件[i]:

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

这似乎是问题所在,尽管你的方法给了我同样的问题。最后是一个for循环,从最后开始倒数,这看起来很有魅力。谢谢你的主意!我已经测试了代码,不能重复你说的话!你确定上面的代码不起作用吗?请拍快照!测试了我的原始代码,还是相反的循环?另外,我是stackoverflow的新手,你想要什么快照?只是好奇代码在我这边运行良好,为什么不适合你?如果它烦人,请忘记它,并为它的帮助而高兴!
var buttons = tabControl.SelectedTab.Controls.OfType<Button>()
for (int i = 0; i < buttons.Count; i++) {
   tabControl.SelectedTab.Controls.Remove(buttons[i]);
}