在文本框中显示列表的C#问题

时间:2011-09-26 18:28:59

标签: c# list textbox

我有一个小应用程序,它有几个复选框,一个提交按钮和一个文本框。我希望用户能够检查他们想要的内容,单击“提交”按钮,并将结果显示在文本框中。应用程序运行但不显示值,而是在文本框中显示“System.Collections.Generic.List`1 [System.String]”。我对此非常陌生,并希望得到任何帮助。我的代码如下......

namespace MY_App
{

public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
    }

    List<string> ls = new List<string>();

    private void Checkbox1_CheckedChanged(object sender, EventArgs e)
    {
                ls.Add( "P.C. ");
    }

    private void Checkbox2_CheckedChanged(object sender, EventArgs e)
    {
            ls.Add( "WYSE Terminal" );
    }

    private void Checkbox3_CheckedChanged(object sender, EventArgs e)
    {

        ls.Add("Dual Monitors "); 
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string line = string.Join(",", ls.ToString());
        textBoxTEST.Text = line;

    }

    private void textBoxTEST_TextChanged(object sender, EventArgs e)
    {

    }

4 个答案:

答案 0 :(得分:3)

ls.ToString()调用Object.ToString,即List类不会假设您想知道如何打印其内部值。如果要创建显示字符串,则需要将字符串数组传递给String.Join,而不是List<T>.ToString()的输出。

string line = string.Join(",", ls.ToArray());
textBoxTEST.Text = line;

答案 1 :(得分:3)

您正在尝试连接对象名称,因为ls.ToString()将完全返回您TextBox中的内容。

相反,请使用以下内容:

string line = string.Join(",", ls.ToArray());
textBoxTEST.Text = line;

此外,这是Linq解决方案:

ls.Aggregate((i, j) => i + ","+ j)

答案 2 :(得分:3)

您遇到的第一个问题是CheckChanged事件。他们应该只在两个条件下添加到列表中。第一个是CheckBox.IsChecked == true,如果它们尚未存在于列表中。

你不应该使用string.Join和ls.ToString()。使用ToArray。

处理SelectionChanged:

private void myCheckBox_SelectionChanged(object sender, SelectionChangedEventArgs e)  
{
    myTextBox.Text = myCheckBox.IsChecked ? myTextBox.Text = "The Value" : myTextBox.Text = string.Empty;   
}

答案 3 :(得分:0)

您必须重写按钮点击事件:

var sb = new StringBuilder();
Foreach( var item in ls)
{
 sb.Append(String.Format("{0} , ",item));
}
textboxTEST.Text = sb.ToString();

你甚至可以改变这一点,以便在你的最后一个项目之后你没有得到“,”但我认为你可以解决这个问题。 :)