2017-03-24 3 views
0

저는 C#을 처음 사용했습니다. 버튼을 누르면 동적으로 생성 된 레이블의 값을 업데이트하려고합니다. 그러나 양식의 레이블을 덮어 쓰지는 않습니다.C# 런타임에서 동적으로 생성 된 레이블을 업데이트하는 방법

namespace WindowsFormsApplication4 
{ 
    public partial class Form1 : Form 
    { 

     int b = 1; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      Label label = new Label(); // used to print users 

      label.Text = String.Format("{0}", b); 

      label.Left = 10; 
      label.Top = 25; 
      this.Controls.Add(label); 

      b = b + 1; 

      Console.WriteLine(b); 

     } 

    } 
} 
+1

을 동일한 접근 방식을 사용하여 당신이 b를 추적하는 데 사용 할 수 있습니다 혼란스러워. 단추를 클릭 할 때마다 레이블을 업데이트하거나 새 레이블을 만들려고합니까? 지금 당장 당신은 매번 새로운 것을 창조하고 있습니다. – itsme86

+0

@ itsme86 이전 레이블을 제거하고 업데이트 된 값으로 새로운 레이블을 작성하고 싶습니다. – Mubi

+0

이것은 질문을 호소합니다 ... 왜 기존 레이블의 텍스트를 업데이트하지 않습니까? – itsme86

답변

1

왜 이전 버전을 업데이트하지 않고 삭제해야하나요? 일단 업데이트되면 결과는 동일합니다. Forms 컨트롤을 초기화할 때 많은 부분이 있습니다. InitializeComponent()를 참조하십시오. 이미 가지고있는 레이블의 Text 속성을 변경하는 것이 훨씬 낫습니다.

private void button1_Click(object sender, EventArgs e) 
    { 
     myLabelsDesignName.Text = String.Format("{0}", b); 


     b = b + 1; 

     Console.WriteLine(b); 

    } 
+0

좋아요, 예를 들어 열의 양식에 10 개의 레이블을 생성하고 그 안에 값을 삽입하면 네 번째 레이블을 제거하고 싶습니다. 어떻게 할 수 있습니까? – Mubi

+0

이것은 매우 모호한 질문이지만 최선을 다할 것입니다. 생성을 위해서는 폼 디자이너를 사용하여 필요할 것으로 기대하는 모든 레이블을 배치해야합니다. 그러면 자동 생성 된 모든 코드가 초기화되어 초기화됩니다. DesignName을 지정했는지 확인하십시오. 그런 다음 cs 코드에서 특정 레이블을 표시할지 여부에 따라 Visible 속성을 간단히 변경할 수 있습니다. – schulmaster

+1

이 경우 발신자는 버튼이며 아마도 변경할 라벨이 아닙니다. 따라서 발신자를 라벨로 전송하여 라벨 참조를 얻는 대신 특정 라벨을 참조하는 방법이 필요합니다. –

0

원하는대로하려면 이전 레이블을 참조하는 방법이 필요합니다.

int b = 1; 
Label labelOnForm; 
public Form1() 
{ 
    InitializeComponent(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    if (labelOnForm != null) 
    { 
     this.Controls.Remove(labelOnForm); 
     labelOnForm.Dispose(); 
    } 

    Label label = new Label(); // used to print users 
    label.Text = String.Format("{0}", b); 

    label.Left = 10; 
    label.Top = 25; 
    this.Controls.Add(label); 

    labelOnForm = label; 

    b = b + 1; 

    Console.WriteLine(b); 
} 

그러나, 당신은 단순히 기존의 라벨을 업데이트 할 수 있습니다 대신 새로운마다 작성 : 난

int b = 1; 
Label labelOnForm; 
public Form1() 
{ 
    InitializeComponent(); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    if (labelOnForm == null) // label doesn't exist yet 
    { 
     Label label = new Label(); // used to print users 

     label.Left = 10; 
     label.Top = 25; 
     this.Controls.Add(label); 

     labelOnForm = label; 
    } 

    labelOnForm.Text = String.Format("{0}", b); 

    b = b + 1; 

    Console.WriteLine(b); 
} 
+0

itsme86 고맙습니다. – Mubi

관련 문제