C# Windows窗体将列表传递到新窗体

C# Windows窗体将列表传递到新窗体,c#,winforms,C#,Winforms,如何将变量传递到另一个窗体 我创建了以下类: class Cart { private string productName; private int qtd; private decimal price; public decimal Price { get { return price; } set { price = v

如何将变量传递到另一个窗体

我创建了以下类:

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);
    }
}
public分部类frmProducts:Form
{
List cartList=新列表();
私有void btnAddCart_单击(对象发送者,事件参数e)
{
如果(txtQtd.Text==“”)
{
MessageBox.Show(“输入您想要多少项。”,“产品”,MessageBox按钮。确定);
返回;
}
if(Convert.ToInt32(txtQtd.Text)>Convert.ToInt32(lblQtd.Text))
{
MessageBox.Show(“我们只有”+lblQtd.Text+“库存商品”,“产品”,MessageBoxButtons.OK);
返回;
}
购物车=新购物车();
cart.ProductName=lblProductName.Text;
cart.Qtd=Convert.ToInt32(lblQtd.Text);
cart.Price=Convert.ToDecimal(lblPrice.Text);
cartList.Add(购物车);
}
}

我有另一个WindowsForms可以使用cartList。如何将cartList发送到新的windows窗体?

在新的windows窗体中声明cartList的属性。在显示该窗体之前设置属性。然后您的新表单可以使用该属性

frmProcessCart
成为下一个需要
cartList
继续的表单。为此,您可以使用以下任一选项:

  • 在该表单的构造函数中获取
    列表
这意味着您必须将新表单的
cartList
传递给它的构造函数,这样您将获得与它们的列表相同的实例,您也可以继续执行该操作。在本例中,该表单的构造函数如下所示:

 public frmProcessCart(List<Cart> cartList)
 {
     // Something here if needed            
 }

试着从变量的范围来思考,如果它们是全局级别的,那么最好使它们全局化。而且创建实体类来存储和传递全局数据要容易得多。您可以将购物车作为静态属性
公共静态列表购物车{Private set;get;}
,在主窗体中初始化它。将其与MainForm一起使用。CartI试图使cartList保持静态,但我得到了错误:命名空间不能直接包含字段或方法等成员。如果问题出在声明列表的位置,请确保定义属于类
frmProducts
。查看更新
public partial class frmProducts : Form
{
    public static List<Cart> cartList = new List<Cart>();
    // Rest of code here
}