2015-02-12 150 views
0

我想删除在tabPage上运行时所做的按钮。我做了一个函数,应该通过该tabPage上的所有控件,但由于某种原因,每次调用时只有一半的按钮被删除。 (有在页面上8个按钮,我希望所有被删除)从tabPage删除控件

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; 
    } 

回答

0

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

您可以尝试把所有的按钮,并将其保存到一个临时集合,而不是用SelectedTab.Controls直接引用他们[我]:

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

BTW:您可能会考虑通过改变隐藏这些按钮可见性属性。

+0

这似乎是问题所在,虽然你的方法给了我同样的问题。结束了一个for循环,从最后数回来,这似乎像一个魅力。感谢您的想法! – Damonky 2015-02-12 04:47:40

+0

我已经测试了代码,并且不能重复你所说的!你确定上面的代码不起作用吗?快照请! – David 2015-02-12 04:48:38

+0

测试了我的原始代码,或反向for循环?此外,我是新的stackoverflow,你想要一个快照? – Damonky 2015-02-12 04:54:38