2016-09-01 2 views
-1

질문하고 싶습니다. 이 코드를 얻었고 내 의도는 동적 레이블을 만들어 다른 레이블 위에 레이블을 겹치지 않고 값을 새로 고칩니다.동적 라벨의 C# refresh 값

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace refresh_label 
{ 
    public partial class Form1 : Form 
    { 
     Int64 num1 = 0; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 
      Timer t1 = new Timer(); 
      t1.Interval = 1; 
      t1.Tick += new EventHandler(lbl_refresh); 
      t1.Enabled = true; 
      Label lbl = new Label(); 
      lbl.Text = num1.ToString(); 
      this.Controls.Add(lbl); 
     } 

     private void lbl_refresh(object sender, EventArgs e) 
     { 
      num1++; 
     } 
    } 
} 

//on this one it's working but staking labels. is there a way to refresh the label without staking it and then clear it? thank you for your time. 

private void Form1_Load(object sender, EventArgs e) 
{ 

    Timer t1 = new Timer(); 
    t1.Interval = 1; 
    t1.Tick += new EventHandler(lbl_refresh); 
    t1.Enabled = true; 
} 

private void lbl_refresh(object sender, EventArgs e) 
{ 
    num1++; 

    Label lbl = new Label(); 
    lbl.Text = num1.ToString(); 
    this.Controls.Add(lbl); 
    lbl.BringToFront(); 
} 
+0

새 레이블 매번 만들 필요가 없습니다. 타이머를 만들고 단일 레이블에 값을 표시하고 싶습니까? – MethodMan

+0

Can not just lbl.Text = string.Empty; 삭제하려면 lbl.Text = newValue; 설정하려면 lbl.Invalidate; 강제로 다시 그리기? – Kevin

답변

0

이 시도하십시오 -

코드를 디자인 타임에 레이블을 추가 및 변경 - 스타터

private void lbl_refresh(object sender, EventArgs e) 
{ 
    num1++; 

    lbl.Text = num1.ToString(); 
    lbl.Update(); 
} 
+0

안녕하세요, 덕분에, 이미 시도했지만 그것은 말합니다 : 이름 'lbl'은 현재 상황에 존재합니다. 나는 라벨을 쌓아 올릴 수 있고 그것을 지우고 컨트롤로 지울 수도 있지만 오랫동안 계속해서 겹쳐 쌓은 라벨을 유지하고 지우거나 지울 때 떨리는 것을 만들 때 내 문제가된다. –

+0

클래스 전체에서 사용할 수 있도록 클래스 범위 (num1로 선언 한 동일한 위치)에서 lbl을 선언하십시오. – Kevin

+0

좋아, 그것은 매력처럼 작동 :) 정말 고마워. 더 이상 쌓이지 않고 작동합니다. 감사. –

0
Int64 num1 = 0; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     Timer t1 = new Timer(); 
     t1.Interval = 1; 
     t1.Tick += new EventHandler(lbl_refresh); 
     t1.Enabled = true; 
     Label lbl = new Label(); 

     lbl.Name="myLabel"; 
     lbl.Text = num1.ToString(); 
     this.Controls.Add(lbl); 
    } 

    private void lbl_refresh(object sender, EventArgs e) 
    { 
     Label l = Controls.Find("myLabel",true)[0] as Label; 
     l.Text = num1.ToString(); 
     num1++; 
    }