2015-02-12 82 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