2016-10-23 7 views
0

ボタンを押してテキストボックスとラベルを1つずつ削除しようとしています。 私は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

はそれをやって、ワンクリックですべてのテキストボックスを削除します1つではなく – mihai11

答えて

1

一度に1つのTextBoxだけを削除したいのですが、なぜforeachループが必要ですか?ただ、最後または最初のTextBoxをつかむと、それがnullでない場合コントロールからそれを削除します。また、その次の時間は、あなたがそれをしようとしませんテキストボックスを削除するために要求されます、あなたがinputTextBoxesからそれを削除していることを確認してください

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

もう一度取り除いて次のものに進みます。

を編集

@Piotr貰えるはあなたが持っているもう一つの問題点を指摘している、あなたはinputTextBoxのために、新しいテキストボックスを追加するたびに、新しいリストを割り当て、あなたは一度だけ、あなたのクラスを作成するときにリストを割り当てる必要があります。

onClickAddメソッドからこれを削除します。

inputTextBoxes = new List<TextBox>(); 

そして、あなたはフィールドそれあなたのクラスとしてリストを宣言するときにこれを使用する:

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

これを試しても、最後のもの/最初のものだけを取り除きます – mihai11

+0

うわー、たくさん ! – mihai11

+0

うれしい私は助けることができました!私はあなたが新しいので、あなたがそうであることを見ることができるので、あなたが答えを感じる場合は、緑色のチェックマークをクリックして '受け入れ'とマークすることができます – YuvShap

2

あなたは常にあなたのOnClickAddで新しいリストを作成しています()メソッド:

inputTextBoxes = new List<TextBox>(); 

inputTextBoxesがnullであるかどうかを確認してください。aこのコード行を実行してください。それ以外の場合は、残りのコードを実行してください。 また、onClickRemove()メソッドがテキストボックス/ラベルの削除を完了した後で、inputTextBoxesリストをクリアすることについて忘れないでください。

関連する問題