String [] - ListBox中的数组

时间:2017-07-19 14:30:29

标签: c# arrays string listbox

我是编程的新手,尤其是c#。 我想将Txt-File导入listBox。 我使用下面的代码,但我在listBox中看到的只有几行“String [] - Array”而不是Text-File中的实际行。

private void button2_Click(object sender, EventArgs e)
{
    OpenFileDialog op = new OpenFileDialog();
    if (op.ShowDialog() == DialogResult.OK)
    {
        textBox2.Text = op.FileName;
    }

    List<string[]> lines = File.ReadLines(textBox2.Text)
                           .Select(r => r.TrimEnd('#'))
                           .Select(line => line.Split(','))
                           .ToList();
    listBox1.DataSource = lines;

}

你能帮助我吗?也许可以给我一个小小的提示,说明做错了什么?

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

最终Select(line => line.Split(',')会返回数组;你可能想要数组的项目

...
List<string[]> lines = File
  .ReadLines(textBox2.Text)
  .Select(r => r.TrimEnd('#'))
  .Select(line => line.Split(',')[index]) //TODO: put the right index here
  .ToList();
...

或整行(drop Split

... 
 List<string[]> lines = File
  .ReadLines(textBox2.Text)
  .Select(r => r.TrimEnd('#'))
  .ToList();
...

答案 1 :(得分:0)

提供文本文件后,这就是您所需要的。刚刚用你的文本文件进行测试并且有效,完整的代码是:

    private void button1_Click(object sender, EventArgs e)
    {
        OpenFileDialog op = new OpenFileDialog();
        if (op.ShowDialog() == DialogResult.OK)
        {
            textBox1.Text = op.FileName;
        }

        List<string[]> lines = File.ReadLines(textBox1.Text)
                .Select(r => r.TrimEnd('#'))
                .Select(line => line.Split(','))
                .ToList();

        foreach (String[] item in lines)
        {
            listBox1.Items.Add(item[0] + " " + item[1]);
        }
    }

答案 2 :(得分:0)

我不知道你的文本文件中有什么数据,我只能给你一些一般信息:

列表框通常使用List<itemObject>之类的来源。 itemObject应至少包含字段或属性(例如&#34; id&#34;),用于标识列表框中的选项,以及文本包含向用户显示的文本的字段(例如&#34; name&#34;)。

当用户点击文本时,您可能希望处理列表框中的点击事件并获取相应的以对其执行某些操作。

您的文本文件是否与 value text 的概念相关,您是否可以创建它的对象列表?如果是这样,你可以走两条路线:

路线1:
listBox1.DataSource = listObject;

当您执行WinForms时,在设置DataSource时也设置DisplayMember和ValueMember。

listBox1.DataSource = listObject;
listBox1.DisplayMember= "SomeDescriptionField";
listBox1.ValueMember = "AnIdField";

在Asp.net中,您可以执行类似

的操作
listBox1.DataSource = listObject;
listBox1.DataTextField = "SomeDescriptionField";
listBox1.DataValueField = "AnIdField";
listBox1.DataBind();

如果你没有,listBox将显示list.ToString(),这可能就是发生了什么。

路线2:
listBox1.Items.AddRange(listObject.ToArray());

(或在迭代中你可以做listBox1.Items.Add(...)