2016-09-01 5 views
-1

ich möchte eine Frage stellen. Ich habe diesen Code und meine Absicht besteht darin, mein dynamisches Label so zu gestalten, dass der Wert aktualisiert wird, ohne dass ein Etikett auf einem anderen gestapelt wird.C# Aktualisierungswert auf einem dynamischen Etikett

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

für den Anfang gibt es keine Notwendigkeit, ein neues Etikett jedes Mal zu erstellen. Möchten Sie nur einen Timer erstellen und die Werte in einem einzelnen Label anzeigen? – MethodMan

+0

Kannst du nicht einfach lbl.Text = string.Empty; zu löschen, lbl.Text = newValue; einstellen, lbl.Invalidate; erzwingen Neuzeichnen? – Kevin

Antwort

0

Bitte versuchen Sie dies -

das Etikett zur Entwurfszeit hinzufügen und ändern Sie den Code -

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

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

hallo danke, habe schon versucht, aber es steht: Der Name 'lbl' existiert im aktuellen Kontext. Ich kann das Etikett stapeln und es löschen und es auch mit Kontrollen entfernen, aber für eine lange Zeit läuft das Stapeln von Etiketten und wenn ich es lösche oder entferne es flackert, ist das mein Problem. –

+0

Deklarieren Sie lbl im Klassenbereich (an derselben Stelle, an der Sie num1 deklariert haben), damit sie in der Klasse verfügbar ist. – Kevin

+0

ok es funktionierte wie Charme :) vielen Dank. es funktioniert, stapelt nicht mehr. Vielen Dank. –

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++; 
    } 
Verwandte Themen