web-dev-qa-db-ja.com

textBoxにList <String>を表示(Winforms)

Noobの質問...リストをテキストボックスに表示しようとしています...残念ながら、私のコードはリストの最初の要素のみを表示します...

    private void Form1_Load(object sender, EventArgs e)
    {
        List<String> vegetables = new List<String>();
        vegetables.Add("tomato");
        vegetables.Add("carrot");
        vegetables.Add("celery");
        vegetables.Add("potato");

        textBox1.Text = displayMembers(vegetables);
    }

    public string displayMembers(List<String> vegetables)
    {
        foreach (String s in vegetables)
        {
            return s.ToString();
        }
        return null;
    }

すべてのメンバーを表示するtextBoxを取得するにはどうすればよいですか?私の間違いはどこですか?

14
iggy2012

return s.ToString()を実行すると、そのメソッドの残りは実行を停止します。
メソッドは複数のものを返すことはできません。

おそらく書きたい

someTextBox.Text = String.Join(Environment.NewLine, vegetables);
30
SLaks

string.Join() を使用します。

textbox1.Text = string.Join(" ", vegetables);

答えはあなたが思ったよりも近くて簡単でした:)

注:コメントで述べたように、この特定の関数には、.Netフレームワークのv4.0で追加されたいくつかのオーバーロードがあります。以前のバージョンで使用可能なものを確認するには、Other Versions MSDN docoページのタイトルのすぐ下のドロップダウン。

6
slugster

何らかの方法で文字列を連結する必要があります

public string displayMembers(List<String> vegetables)
{
    return string.Join(", ", vegetables.ToArray());
}

または

public string displayMembers(List<String> vegetables)
{
    return string.Join(Environment.NewLine, vegetables.ToArray());
}
2
Albin Sunnanbo

Foreachを実行していますが、最初の要素に戻ります。これにより、最初の要素のみが表示されます。

代わりに、おそらく次のようなことをしたいでしょう:

public string DisplayMembers(IEnumerable<String> vegetables)
{
    return String.Join(", ", vegetables);
}

これは String.Join を使用して、野菜を「つなぎ合わせて」単一の文字列にし、TextBoxに表示できます。

0
Reed Copsey

これを試して:

public string displayMembers(List<String> vegetables)
{
    var text = string.Empty;
    foreach (String s in vegetables)
    {
        text += s.ToString() + "\r\n";
    }
    return text;
}
0
Abdul Munim