2016-10-23 5 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

한 번에 하나의 TextBox 만 제거하려는 경우 왜 foreach 루프가 필요합니까? 단지 마지막 또는 첫 번째 텍스트 상자를 잡아, 그것이 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 목록을 지우는 것에 대해 유의하십시오.

관련 문제