2016-10-23 3 views
0

Ich versuche, Textfelder und Beschriftungen nacheinander auf Knopfdruck zu entfernen. Ich habe eine Liste von Textboxen namens inputTextBoxes. HierEntfernen von Textbox/Label bei Klick auf die Schaltfläche C#

ist der Code für das Hinzufügen von:

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

Zum Entfernen ich dies versuchen:

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

    } 

Aber es entfernt nur die letzte Textbox hinzugefügt, klicken againg auf die Schaltfläche nicht tut, etwas.

+0

weil Sie nur 1 Textfeld haben – Sajeetharan

+0

Überprüfen Sie diesen Link - http://stackoverflow.com/questions/23326276/removing-textboxes-created-dynamically-on-button-click –

+0

Doing das entfernt alle Textboxen mit einem Klick, nicht eins nach dem anderen – mihai11

Antwort

1

Sie möchten nur eine TextBox auf einmal entfernen, warum brauchen Sie eine foreach-Schleife? greifen nur die letzte oder erste TextBox und wenn sie es von den Kontrollen nicht null entfernen:

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

Stellen Sie sicher, dass es von inputTextBoxes entfernen auch so das nächste Mal fragt einen Text zu entfernen, wird es nicht versuchen, entferne es wieder und gehe zum nächsten.

bearbeiten

@Piotr Nowak ein weiteres Problem hingewiesen hat Sie haben, Sie eine neue Liste für inputTextBox zuweisen jedes Mal, wenn eine neue TextBox hinzufügen, sollten Sie die Liste zuweisen nur einmal, wenn Sie Ihre Klasse erstellen.

entfernen diese aus onClickAdd Methode:

inputTextBoxes = new List<TextBox>(); 

Und diese verwenden, wenn Sie die Liste als Feld, um es Ihre Klasse deklarieren:

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

Versucht dies, aber es entfernt immer noch nur die letzte/erste – mihai11

+0

Wow, es hat funktioniert, danke viel ! – mihai11

+0

Ich bin froh, dass ich helfen konnte! Ich kann sehen, Sie sind neu auf SO, also Wenn Sie eine Antwort fühlen, löste das Problem, können Sie es als "akzeptiert" markieren, indem Sie auf das grüne Häkchen – YuvShap

2

Du eine neue Liste in Ihrer OnClickAdd ständig zu schaffen() Methode:

inputTextBoxes = new List<TextBox>(); 

Versuchen Sie zu überprüfen, ob die inputTextBoxes null ist nd dann nur diese Codezeile. Ansonsten lass einfach den Rest des Codes laufen. Denken Sie auch daran, die inputTextBoxes-Liste zu löschen, nachdem die onClickRemove() -Methode das Entfernen von Textfeldern/Beschriftungen beendet hat.

Verwandte Themen