2016-10-23 4 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, и если он не обнулить удалить его из элементов управления:

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 каждый раз, когда вы добавляете новый TextBox, вы должны выделить список только один раз, когда вы создаете свой класс.

Удалить это из метода onClickAdd:

inputTextBoxes = new List<TextBox>(); 

И использовать это, когда вы объявите список как поле это ваш класс:

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

Пробовал это, но он по-прежнему удаляет только последний/первый – mihai11

+0

Ничего себе, это сработало, спасибо много ! – mihai11

+0

Рад, что я могу помочь! Я вижу, что вы новичок в SO, поэтому, если вы чувствуете, что ответ решил проблему, вы можете отметить ее как «принятую», нажав зеленую галочку – YuvShap

2

Вы постоянно создавать новый список в вашем OnClickAdd():

inputTextBoxes = new List<TextBox>(); 

Постарайтесь проверить, является ли inputTextBoxes нулевым nd только тогда выполните эту строку кода. В противном случае просто оставите остальную часть кода. Кроме того, помните об очистке списка inputTextBoxes после того, как метод onClickRemove() завершит удаление текстовых полей/меток.

Смежные вопросы