2013-10-15 39 views
1

我已經創建了兩種不同的形式,一種是供用戶選擇值,另一種是顯示所有總成本。第二種形式不能正確顯示

我確實聲明瞭另一個類的實例,並向它傳遞了兩個持有費用的變量。在第二個類中,我有一個構造函數接受參數,然後將它們分配給第二種形式的變量。

當試圖通過使用「.ShowDialog();」顯示第二個結果時,方法,窗體顯示爲空白,沒有任何內容。

第一形式:

namespace DormAndMeal 
{ 
    public partial class MainForm : Form 
    { 
     int ALLENPRICE = 1500; 
     int PIKEPRICE = 1600; 
     int FARTHINGPRICE = 1800; 
     int UNIVERSITYPRICE = 2500; 

     int MEAL7 = 600; 
     int MEAL14 = 1200; 
     int UNLIMITEDMEAL = 1700; 



     public MainForm() 
     { 
      InitializeComponent(); 
     } 

     private void btnExit_Click(object sender, EventArgs e) 
     { 
      // close 
      this.Close(); 
     } 

     private void btnOkay_Click(object sender, EventArgs e) 
     { 

      int roomCharge = 0; 
      int foodCharge = 0; 

      // Checking for the room plan chosen, assigning price to roomCharge 
      if (radAllen.Checked) 
      { 
       roomCharge = ALLENPRICE; 
      } 
      else if (radPike.Checked) 
      { 
       roomCharge = PIKEPRICE; 
      } 
      else if (radFarthing.Checked) 
      { 
       roomCharge = FARTHINGPRICE; 
      } 
      else if (radUniversity.Checked) 
      { 
       roomCharge = UNIVERSITYPRICE; 
      } 


      // Checking for which meal plan was selected, assign price to foodCharge 
      if (radMeal1.Checked) 
      { 
       foodCharge = MEAL7; 
      } 
      else if (radMeal2.Checked) 
      { 
       foodCharge = MEAL14; 
      } 
      else if (radMeal3.Checked) 
      { 
       foodCharge = UNLIMITEDMEAL; 
      } 

      // Instance of Charges form 
      Charges myCharges = new Charges(foodCharge, roomCharge); 

      // Display the form 
      myCharges.ShowDialog(); 
     } 
    } 
} 

正如你可以看到,該形式發現其選擇單選按鈕,並相應地分配的價格,然後它創建的第二形式的一個實例,並示出了它。

形式2:

namespace DormAndMeal 
{ 
    public partial class Charges : Form 
    { 
     int foodTotal; 
     int roomTotal; 

     public Charges() 
     { 
      InitializeComponent(); 
     } 

     public Charges(int food, int room) 
     { 
      this.roomTotal = room; 
      this.foodTotal = food; 
     } 

     private void Charges_Load(object sender, EventArgs e) 
     { 
      lblFood.Text = foodTotal.ToString("c"); 
      lblRoom.Text = roomTotal.ToString("c"); 

      lblTotal.Text = (foodTotal + roomTotal).ToString("c"); 
     } 

     private void btnClose_Click(object sender, EventArgs e) 
     { 
      // close 
      this.Close(); 
     } 
    } 
} 

這種形式有一個構造函數接受的參數併爲它們分配,然後通過並顯示他們所在的表格上相應的變量。

由於某種原因,第二種形式顯示空白。

+0

所以第二種形式應該有一個按鈕和3個標籤? – Brian

回答

4

你是不是調用InitializeComponents方法,這將創建所有控件從設計器文件:

public Charges(int food, int room) 
{ 
    InitializeComponent(); 
    this.roomTotal = room; 
    this.foodTotal = food; 
} 

或在評論中指出,你可以打電話給你的其他的構造函數:

public Charges() 
{ 
    InitializeComponent(); 
} 

public Charges(int food, int room) 
    : this() 
{ 
    this.roomTotal = room; 
    this.foodTotal = food; 
} 
+2

澄清/額外說明:僅僅因爲你做了另一個構造函數並不意味着它會調用以前的構造函數。所有的邏輯必須複製到另一個。更好的是,讓這兩個構造函數調用一個通用函數來執行「設置」,然後再執行您的獨特邏輯。 – gunr2171

+3

我會調用基礎構造函數(使用':this()')而不是在每個構造函數中調用'InitializeComponent'。 –

+2

public Charges(int food,int room):this()是獲取默認構造函數運行的良好語法。 –

相關問題