我有一个小应用程序,它有几个复选框,一个提交按钮和一个文本框。我希望用户能够检查他们想要的内容,单击“提交”按钮,并将结果显示在文本框中。应用程序运行但不显示值,而是在文本框中显示“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)
{
}
答案 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();
你甚至可以改变这一点,以便在你的最后一个项目之后你没有得到“,”但我认为你可以解决这个问题。 :)