2017-03-27 16 views
1

現在、2つのテキストボックスと1つのnumericUpDownから3人のユーザー入力を受け取るフォームがあります。複数の項目を配列に追加し、配列をテキストボックスに表示

ボタンをクリックしたときに値を取得し、すべての3の値を別のテキストボックスに表示したいと考えています。

複数の追加がある場合に問題が発生します。 配列の作成を試みましたが、最後の入力だけが表示されます。

 private void AddButton_Click(object sender, EventArgs e) 
    { 
     string newItem = NameTextBox.Text + "\t" + QuantityBox.Value.ToString() + "\t" + PriceBox.Text; 
     List<String> newItemList = new List<string>(); 
     newItemList.Add(newItem); 
     for(int i = 0; i < newItemList.Count; i++) 
     { 
      BasketBox.Text = newItemList[i] + "\n"; 
     } 
    } 
+0

あなたの 'AddButton_Click'メソッドの外で' newItemList'のインスタンス化を移動します。ボタンをクリックするたびに、新しいリストが作成され、既存のリストの内容が失われます。 –

+0

あなたは毎回 '.Text'を上書きしています。 BasketBox.Text = newItemList [i] + "\ n" 'BasketBox.Text + = newItemList [i] +" \ n "; ' –

+0

' newItemList'宣言をメソッドの外に移動します。テキストボックスを置き換えるのではなく、テキストボックスの 'Text'に追加してください。 [Microsoft .NETの変数とメソッドの範囲](https://msdn.microsoft.com/en-us/library/ms973875.aspx)を参照してください。または['TextBox.AppendText'](https://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.appendtext(v = vs.110).aspx)を見てください。 –

答えて

1

あなたのリストを関数の外に作ってください入力のリストを維持することができます とすべてのクリックで更新されたリストを表示します。

List<String> newItemList = new List<string>(); 
private void AddButton_Click(object sender, EventArgs e) 
{ 
    string newItem = NameTextBox.Text + "\t" + QuantityBox.Value.ToString() + "\t" + PriceBox.Text; 

    newItemList.Add(newItem); 
    for(int i = 0; i < newItemList.Count; i++) 
    { 
     BasketBox.Text = newItemList[i] + "\n"; 
    } 
} 
+0

Yepyepyep、「\ n」!=「\ r \ n」ということはいつまでもわかっていました。 –

0

あなたはこのようにそれを行うことができます。

private void AddButton_Click(object sender, EventArgs e) 
    { 
     string newItem = NameTextBox.Text + "\t" + QuantityBox.Value.ToString() + "\t" + PriceBox.Text; 
     List<String> newItemList = new List<string>(); 
     newItemList.Add(newItem); 
     for(int i = 0; i < newItemList.Count; i++) 
     { 
      BasketBox.Text += newItemList[i] + "\n"; // this will add the text to your box 
     } 
    } 

これはBasketBoxで古いテキストを '消去' します:

BasketBox.Text = newItemList[i] + "\n" 

これはBasketBoxにテキストを追加します。

BasketBox.Text += newItemList[i] + "\n" 
+0

これは非常に近いです!ありがとうございました! 問題は、何らかの理由で新しい行に出てこないということです。 –

0

一撃でリストから文字列アイテムの連結を行い、クール方法String.Joinあります:あなたはボタンがアイテムをクリックするたびに比べて外リストを宣言すると意志

BasketBox.Text = String.Join(Environment.NewLine, newItemList); 

それに追加され、すべての項目が表示されます。

List<String> newItemList = new List<string>(); 

private void AddButton_Click(object sender, EventArgs e) 
{ 
    string newItem = NameTextBox.Text + "\t" + QuantityBox.Value.ToString() + "\t" + PriceBox.Text; 
    newItemList.Add(newItem); 
    BasketBox.Text = String.Join(Environment.NewLine, newItemList); 
} 

編集:

これは、プロパティMultilineをtrueに設定した場合にのみ有効です。

関連する問題