2017-03-24 5 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

私は混乱している。ボタンをクリックするたびにラベルを更新したり、新しいラベルを作成しようとしていますか?今は毎回新しいものを作成しています。 – 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個のラベルを生成し、その中に値を挿入すると、4番目のラベルを削除したいのですが...どうすればいいですか? – 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); 
} 

しかし、あなたは、単に代わりに新しいものを毎回作成する既存のラベルを更新することができます:あなたは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

関連する問題