2017-03-23 3 views
0

Je suis nouveau en C#, j'ai besoin d'écraser l'étiquette sous Windows. Je génère le nombre d'étiquettes en fonction de la valeur de n en utilisant la boucle. Le problème: si je change la valeur de lines[i] lors de l'exécution du programme, la valeur est modifiée mais n'est pas mise à jour sous Windows (la valeur précédente n'est pas remplacée par une nouvelle).Écraser le texte de l'étiquette dans le programme en cours d'exécution

Quelqu'un peut-il me guider comment puis-je faire cela?

Je suis aussi rafraîchissant le code à chaque seconde en utilisant la minuterie, qui fonctionne aussi bien

Ceci est la partie où je crée l'étiquette et écrire la valeur, et il est dans la boucle

Label label = new Label(); 
label.Text = String.Format("{0}", lines[i]); 

label.Left = 10; 
label.Top = (i + 1) * 25; 
this.Controls.Add(label); 

ici est mon identifiant quelqu'un complet de code doit vérifier:

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; 
using System.IO; 

namespace Admin 
{ 
    public partial class Form1 : Form 
    { 

     string pathuser = @"//192.168.2.10/Shared-Public/Users.txt"; 

     int check = 0; 

     public static string usernam; 
     string[] lines = new String[500]; 
     string[] lines2 = new String[500]; 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void timer_Tick(object sender, EventArgs e) 
     { 

      tc = tc + 1; 
      Console.WriteLine(tc); 
      int c = 2; 
      int u = 0; 
      int us = 0; //for user pass 
      int z = 0; // for reading values from file 

      using (StreamReader sr2 = new StreamReader(pathuser)) 
      { 

       string line; 


       while ((line = sr2.ReadLine()) != null) 
       { 
        lines[us] = line; 


        us++; 
       } 
      } 


      for (int i = 0; i < us; i++) 
      { 

       //Create label 
       Label label = new Label(); 
       label.Text = String.Format("{0}", lines[i]); 
       //Position label on screen 
       label.Left = 10; 
       label.Top = (i + 1) * 25; 


       Label label2 = new Label(); 
       label2.Left = 120; 

       label2.Top = (i + 1) * 25; 


       string line2; 

       string path = "//192.168.2.10/Shared-Public/" + lines[i] + DateTime.Now.ToString(" MM-dd-yyyy") + ".txt"; 
       if (!File.Exists(path)) 
       { 
        lines2[z] = null; 
       } 
       else 
       { 
        using (StreamReader sr3 = new StreamReader(path)) 
        { 

         while ((line2 = sr3.ReadLine()) != null) 
         { 
          lines2[z] = line2; 

          z++; 
         } 
        } 
        label2.Text = String.Format("{0}", lines2[0]); 

        u = z; 
        z = 0; 
       } 


       PictureBox picbox = new PictureBox(); 
       picbox.Location = new Point(240, 25 + (i*25)); 
       picbox.Size = new Size(15, 15); 

       if (u%2==0) 

        picbox.BackColor = Color.Green; 

       else 
        picbox.BackColor = Color.Red; 
       u = 0; 


       this.Controls.Add(label); 
       this.Controls.Add(label2); 
       this.Controls.Add(picbox); 

      } 
     } 
     int tc = 0; 
     private void Form1_Load(object sender, EventArgs e) 
     { 
      Timer timer = new Timer(); 
      timer.Interval = (1000); 
      timer.Tick += new EventHandler(timer_Tick);   
      timer.Start(); 
     } 


    } 
} 
+0

Si vous créez le libellé que vous souhaitez modifier manuellement, vous devez le conserver dans une variable du formulaire. Ensuite, lorsque vous voulez le changer, vous accédez à l'étiquette par la variable et la modifiez. Cependant, vous faites probablement quelque chose d'autre qui ne va pas. Exécutez votre application et voyez si vous pouvez déplacer le formulaire pendant que votre code est actualisé toutes les secondes. Je parie que votre interface ne répond pas, amirite? – Will

+1

Vous pourriez donner 'Label 'un nom qui comprend' i', par exemple 'label.Name =" label_ "+ i;'. Ensuite, lorsque vous mettez à jour 'list [i]' également mettre à jour 'Controls [" label_ "+ i] .Text = list [i];' –

+0

Si j'ajoute une nouvelle valeur dans le fichier où il lit les valeurs, il l'ajoute à la forme mais si je modifie la même valeur, il ne le remplace pas ..... – Mubi

Répondre

1

Donnez Name de votre étiquette un identifiant unique et Rechercher et remplacer la valeur:

Label label = new Label(); 
var someid = new Guid().ToString(); 
label.Name = someid; 
label.Text ="aaaa"; 

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

foreach(Control item in this.Controls) 
{ 
    if (item.Name == someid) 
     item.Text = "bbb"; 
}