2014-02-08 2 views
4

Button의 번호를 동적으로으로 만들고 싶습니다. 범위는 TextBox입니다.동적으로 생성 된 버튼을 제거하는 방법

문제는 예를 들어 범위 (3)를 입력 할 때입니다. 3 버튼을 생성하지만 예를 들어 (2) 앞의 범위보다 작 으면 범위를 지정합니다. 그것은 나에게 보여주지 않는다 2 개의 버튼 그것은 나에게 이전 3 개의 버튼을 보여준다. 내 코드는 이전 범위보다 큰 범위에서 작동하지만 새 범위가 이전 범위보다 작 으면 실패합니다.

여기 내 코드입니다 :

private void button2_Click(object sender, EventArgs e) 
{ 
    int number = int.Parse(textBox3.Text); 
    Button[] textBoxes = new Button[number]; 
    int location = 136; 

    for (int i = 0; i < textBoxes.Length; i++) 
    { 
     location += 81; 
     var txt = new Button(); 
     textBoxes[i] = txt; 
     txt.Name = "text" + i.ToString(); 
     txt.Text = "textBox" + i.ToString(); 
     txt.Location = new Point(location, 124); 
     txt.Visible = true; 
     this.Controls.Add(txt); 
    } 
} 
+0

왜'button' 배열에'textBoxes'와 같은 이름을 지정합니까? –

+0

먼저 텍스트 상자를 만들고 싶습니다. 그래서 나는 이름을 바꾸는 것을 잊었다. – Loyal

답변

3

이전 컨트롤을 제거하지 않습니다. 새로운 배열을 만들기 전에 배열에 배열을 저장해야합니다.

class Form1 : Form { 
    private Button[] _textBoxes; 

    private void button2_Click(object sender, EventArgs e) { 
     int number = int.Parse(textBox3.Text); 
     if(_textBoxes != null) { 
      foreach(Button b in _textBoxes) 
       this.Controls.Remove(b); 
     } 

     _textBoxes = new Button[number]; 
     int location = 136; 

     for (int i = 0; i < textBoxes.Length; i++) { 
      location += 81; 
      var txt = new Button(); 
      _textBoxes[i] = txt; 
      txt.Name = "text" + i.ToString(); 
      txt.Text = "textBox" + i.ToString(); 
      txt.Location = new Point(location, 124); 
      txt.Visible = true; 
      this.Controls.Add(txt); 
     } 
    } 
} 

이 코드는 테스트하지 않았지만 아이디어를 얻길 바랍니다.

+0

감사합니다 많이 작동합니다! – Loyal

+0

@Loyal 당신은 환영합니다 :) – BlackBear

2

가 실패하지 않는, 어떤 일이 일어나고 것은 사용자가 만든 중복 이전 버튼입니다.

+0

그래,하지만 그 중복을 제거하는 방법. – Loyal

0

먼저 버튼을 제거하십시오. 자신의 이름에 패턴을 유지하거나 글로벌리스트 등을 가지거나 다른 방법으로 패턴을 추적 할 수 있습니다. 이제까지 당신이 기능에서 들어가기 전에, 존재하는 모든 단추를 제거하고 그 때 새로운 것을 창조하십시오.

관련 문제