2016-12-05 9 views
1

どのように変数を別のフォームに渡すことができますか?Windowsフォームのパス新しいフォームへのリスト

私は以下のクラスを作成しました:私はcartListで動作する別のWindowsFormsをhaave

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); 
    } 
} 

:私は私が私のカートに値を追加する一つの形を持っている

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; 
     } 
    } 
} 

を。 cartListを新しいWindowsフォームに送信するにはどうすればよいですか?

+0

変数がグローバルレベルである必要がある場合は、変数のスコープから考えるようにしてください。また、グローバルデータを格納して渡すためのエンティティクラスを作成するのはずっと簡単です。 –

+0

カートを静的なプロパティとしてメインフォームに置くことができます。 'public static List List カート{プライベートセット;取得する; } '、あなたのメインフォームで初期化します。 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

Listを宣言する場所に問題があることを願っています。定義は 'frmProducts'クラスに属します。アップデートを見る –

1

新しいウィンドウでは、cartListのプロパティを宣言します。そのフォームを表示する前にプロパティを設定します。その後、新しいフォームはそのプロパティで動作します。

関連する問題