2016-12-05 188 views
1

如何將一個變量傳遞給另一窗體?Windows窗體將列表傳遞給一個新窗體

我創建了以下類:

class Cart 
{ 
    private string productName; 
    private int qtd; 
    private decimal price; 

    public decimal Price 
    { 
     get 
     { 
      return price; 
     } 

     set 
     { 
      price = value; 
     } 
    } 

    public string ProductName 
    { 
     get 
     { 
      return productName; 
     } 

     set 
     { 
      productName = value; 
     } 
    } 

    public int Qtd 
    { 
     get 
     { 
      return qtd; 
     } 

     set 
     { 
      qtd = value; 
     } 
    } 
} 

我有一個形式,我添加值到我的購物車:

public partial class frmProducts : Form 
{ 

    List<Cart> cartList = new List<Cart>(); 

    private void btnAddCart_Click(object sender, EventArgs e) 
    { 
     if(txtQtd.Text == "") 
     { 
      MessageBox.Show("Enter how many items do you want.", "Products", MessageBoxButtons.OK); 
      return; 
     } 
     if (Convert.ToInt32(txtQtd.Text) > Convert.ToInt32(lblQtd.Text)) 
     { 
      MessageBox.Show("We onlye have " + lblQtd.Text + " items in stock.", "Products", MessageBoxButtons.OK); 
      return; 
     } 

     Cart cart = new Cart(); 
     cart.ProductName = lblProductName.Text; 
     cart.Qtd = Convert.ToInt32(lblQtd.Text); 
     cart.Price = Convert.ToDecimal(lblPrice.Text); 

     cartList.Add(cart); 
    } 
} 

我haave另一個WindowsForms將與cartList工作。我該如何將cartList發送到新的WindowsForms?

+0

試圖從變量的範圍考慮是否需要全局級別,那麼最好讓它們成爲全局變量。而且創建實體類來存儲和傳遞全局數據也更容易。 –

+0

您可以將購物車作爲靜態屬性放在主窗體中[public static List Cart {Private set;得到; },用你的主表單初始化它。使用它與MainForm.Cart – Eric

回答

2

frmProcessCart成爲您需要cartList繼續執行的下一個表格。對於您可以使用任何下列選項:

  • 在窗體的構造函數獲取List<Cart>

這意味着你必須在cartList傳遞以通過其構造新的形式,所以你會得到他們的列表的同一個實例,你也可以繼續。在這種情況下,這種形式的構造是這樣的:

public frmProcessCart(List<Cart> cartList) 
{ 
    // Something here if needed    
} 
  • 另一種選擇是讓cartList爲靜態字段:

在這種情況下,你可以從任何其他形式的訪問cartList應用程序通過frmProducts.cartList,您不需要傳遞任何實例或創建任何frmProducts的實例。在這種情況下cartList的定義將如下

public partial class frmProducts : Form 
{ 
    public static List<Cart> cartList = new List<Cart>(); 
    // Rest of code here 
} 
+0

我試圖使cartList靜態,但我得到的錯誤:名稱空間不能直接包含成員,如字段或方法 – user6824563

+0

希望問題是與您聲明列表的地方,請確保定義屬於'frmProducts'類。查看更新 –

1

在新窗口表單中聲明cartList的屬性。在顯示該表單之前設置屬性。然後,您的新表單可以與該屬性一起使用。

相關問題