2016-10-23 85 views
0

我試圖通過按按鈕來逐個刪除文本框和標籤。 我有一個名爲inputTextBoxes的文本框列表。刪除按鈕上的文本框/標籤單擊C#

下面是添加代碼:

private void onClickAdd(object sender, EventArgs e) 
    { 
     inputTextBoxes = new List<TextBox>(); 
     Label label1 = new Label(); 
     label1.Name = "label1"; 
     label1.Text = "w" + i; 
     label1.Location = new System.Drawing.Point(5, 10 + (20 * i)); 
     label1.Size = new System.Drawing.Size(30, 20); 
     this.Controls.Add(label1); 

      TextBox text1 = new TextBox(); 
      text1.Name = "text1"; 
      text1.Location = new System.Drawing.Point(35, 10 + (20 * i)); 
      text1.Size = new System.Drawing.Size(25, 20); 
      inputTextBoxes.Add(text1); 
      this.Controls.Add(text1); 
      i++; 
    } 

,爲了除去我想這一點:

private void onClickRemove(object sender, EventArgs e) 
    { 
     foreach(TextBox text1 in inputTextBoxes) 
     { 
      this.Controls.Remove(text1); 
     } 

    } 

但它僅刪除最後一個文本框添加,點擊againg按鈕不會做任何東西。

+0

因爲您只有1個文本框 – Sajeetharan

+0

檢查此鏈接 - http://stackoverflow.com/questions/23326276/removing-textboxes-created-dynamically-on-button-click –

+0

這樣做將刪除所有文本框一次點擊,不是一個一個的 – mihai11

回答

1

你想一次只刪除一個文本框,爲什麼你需要一個foreach循環?只要抓住最後一個或第一個TextBox,如果它不爲null從控件中刪除:

private void onClickRemove(object sender, EventArgs e) 
{ 
    var textBoxToRemove = inputTextBoxes.LastOrDefault(); 
    // or 
    // var textBoxToRemove = inputTextBoxes.FirstOrDefault(); 
    if (textBoxToRemove != null) 
    { 
     this.Controls.Remove(textBoxToRemove); 
     inputTextBoxes.Remove(textBoxToRemove); 
    } 
} 

務必從inputTextBoxes刪除它也因此,下一次你會要求刪除一個TextBox它不會嘗試再次移除它並繼續下一個。

編輯

@Piotr諾瓦克指出,你又多了一個問題,你每次添加一個新的文本框的時間分配一個新的列表inputTextBox,您應該分配列表,只有當你創建你的類一次。

從onClickAdd方法Remove這樣的:

inputTextBoxes = new List<TextBox>(); 

,並使用此當你聲明的列表作爲一個字段是你的類:

private readonly inputTextBoxes = new List<TextBox>(); 
+0

試過這個,但它仍然只刪除最後一個/第一個 – mihai11

+0

哇,它的工作,謝謝很多 ! – mihai11

+0

很高興能幫到你!我可以看到你是新的,所以如果你覺得一個答案解決了這個問題,你可以點擊綠色複選標記 – YuvShap

2

您正在不斷地創造你的OnClickAdd一個新的列表()方法:

inputTextBoxes = new List<TextBox>(); 

嘗試檢查inputTextBoxes爲null nd只有這樣做的代碼行。否則,讓其餘的代碼運行。 另外,請記住在onClickRemove()方法完成刪除文本框/標籤後清除inputTextBoxes列表。