2017-05-11 6 views
-2

給与と経費の点で家計の予算を追跡するプログラムを作成しようとしています。 私のプログラムでやりたいことは、家の中の各作業人のラベル(名前と給料)を2つ生成し、必要に応じて削除することです。ランタイム中に表示されるニーズに基づいて動的ラベルを作成する方法

これまで私はさまざまな方法を試していました。ラベルを表示するために、似たような質問からコードをまっすぐにコピーしましたが、私は何も表示しませんでした(プロパティ 'IsDisposed'

Forms1.cs

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 Budget_Management 
{ 
    public partial class Form1 : Form 
    { 

     static Person[] person = new Person[1]; 
     static Label[] name = new Label[1]; 
     static Label[] salary = new Label[1]; 
     static int numOfPeople = 0; 



     public Form1() 
     { 
      InitializeComponent(); 
      Label myLabel = new Label(); 
      myLabel.Top = 10; 
      myLabel.Left = 10; 
      MessageBox.Show(Convert.ToString(myLabel.IsDisposed)); 
     } 

     private void tabPage1_Click(object sender, EventArgs e) 
     { 

     } 

     private void addaPersonButton_Click(object sender, EventArgs e) 
     { 
      int temp; 
      if (int.TryParse(salaryTextBox.Text, out temp) == true) 
       { 
       person = Program.increasePersonAmount(person, numOfPeople); 

       person[numOfPeople] = new Person(); 
       person[numOfPeople].salary = Convert.ToInt32(salaryTextBox.Text); 
       person[numOfPeople].name = nameTextBox.Text; 
       name = Program.increaseLabelAmount(name, numOfPeople); 
       salary = Program.increaseLabelAmount(salary, numOfPeople); 
       Program.generateLabels(name, salary, nameTextBox.Text, Convert.ToInt32(salaryTextBox.Text), numOfPeople); 
       numOfPeople++; 
      } 
      else 
      { 
       MessageBox.Show("Salary is invalid number!"); 
      } 

     } 


    } 
} 


Program.cs: 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace Budget_Management 
{ 
    static class Program 
    { 
     static int numOfSpendings; 
     [STAThread] 
     static void Main() 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 

     } 

     public static Person[] increasePersonAmount(Person[] old, int amount) 
     { 
      Person[] temp = new Person[amount + 1]; 
      for (int i = 0; i < old.Length-1; i++) 
      { 


       temp[i] = old[i]; 

      } 
      return temp; 
     } 


     public static Person[] descreasePersonAmount(Person[] old, int personToDelete, int amount) 
     { 
      Person[] temp = new Person[amount-1]; 
      for (int i = 0, j = 0; i < old.Length; i++) 
      { 
       if (i == personToDelete) 
       { 

       } 
       else 
       { 
        temp[j] = old[i]; 
        j++; 
       } 
      } 
      return temp; 
     } 

     public static Label[] increaseLabelAmount(Label[] old, int amount) 
     { 
      Label[] temp = new Label[amount + 1]; 
      for (int i = 0; i < old.Length - 1; i++) 
      { 


       temp[i] = old[i]; 

      } 
      return temp; 
     } 
     public static void generateLabels(Label[] nameLabel, Label[] salaryLabel, string name, int salary, int labelNum) 
     { 
      nameLabel[labelNum] = new System.Windows.Forms.Label(); 

      nameLabel[labelNum].Text = name; 
      nameLabel[labelNum].Left = 10; 
      nameLabel[labelNum].Top = 5; 
      nameLabel[labelNum].Visible = true; 

     } 
     public static void deleteLabel(int labelNum) 
     { 

     } 

    } 
} 
+0

フォームにラベルを追加する必要があります。 'this.Controls.Add(label)' – Adrian

答えて

0

使用ホイは、ラベルを非表示にするには、国連の順序を必要とするときIRよ偽の設定Visibleプロパティ:ラベルはまだ

はここに私のスパゲッティコードである)が存在します。

0

フォームの初期化時にそれらを隠す、設計面を使用して、フォーム上のラベルを置く:あなたがそれらを表示したいとき

public partial class Form1 : Form 
{ 
    InitializeComponent; 
    label1.Visible = false; 
    label2.Visible = false; 
    //etc. etc. 
} 

を次に、後に自分のコードで、ちょうど真の可視設定:

public void ShowLabels() 
{ 
    label1.Visible = true; 
    label2.Visible = true; 
    //etc. 
} 
関連する問題