2016-12-05 149 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的属性。在显示该表单之前设置属性。然后,您的新表单可以与该属性一起使用。

相关问题