从未知行数的文件(c#)中读取文本,并在预定义标签中添加行

时间:2014-03-23 17:56:31

标签: c# winforms

我目前正在开发一个Windows窗体应用程序。我需要从特定文件中读取文本,我不确定在给定时间该文本文件中的行数,但我需要检索每一行并将其显示在表单页面上。我试图将字符串存储在一个数组中但我得到一个错误“确保列表上的最大索引小于列表大小”。

另请注意,我已在每行的某些位置创建了一些标签,(我制作了大约十个标签)。这是代码中给我带来问题的部分:

            string[] edfTaskList = System.IO.File.ReadAllLines(edfTaskfile);
            oldtask1.Text = edfTaskList[0];
            oldtask2.Text = edfTaskList[1];
            oldtask3.Text = edfTaskList[2];
            oldtask4.Text = edfTaskList[3];
            oldtask5.Text = edfTaskList[4];
            oldtask6.Text = edfTaskList[5];
            oldtask7.Text = edfTaskList[6];
            oldtask8.Text = edfTaskList[7];
            oldtask9.Text = edfTaskList[8];
            oldtask10.Text = edfTaskList[9];

            oldTaskPanel.Controls.Add(oldtask1);
            oldTaskPanel.Controls.Add(oldtask2);
            oldTaskPanel.Controls.Add(oldtask3);
            oldTaskPanel.Controls.Add(oldtask4);
            oldTaskPanel.Controls.Add(oldtask5);
            oldTaskPanel.Controls.Add(oldtask6);
            oldTaskPanel.Controls.Add(oldtask7);
            oldTaskPanel.Controls.Add(oldtask8);
            oldTaskPanel.Controls.Add(oldtask9);
            oldTaskPanel.Controls.Add(oldtask10);

4 个答案:

答案 0 :(得分:1)

我会做这样的事情:

private int lastLablePos;

    public Form1()
    {
        InitializeComponent();
        lastLablePos = panel1.Location.Y;
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        string[] lines = System.IO.File.ReadAllLines(@"D:\test.txt");
        Label[] labels = new Label[lines.Length];

        for (int i = 0; i < lines.Length; i++)
        {

            labels[i] = new Label();
            labels[i].Text = lines[i];
        }

        foreach (Label lable in labels)
        {
            lable.Location = new Point(0, lastLablePos);
            lable.AutoSize = true;
            panel1.Controls.Add(lable);
            lastLablePos += 30;
        }
    }

最后将这些标签添加到带坐标等的表格中。

答案 1 :(得分:0)

您确定该阵列完全有10个或更多条目吗?我想这就是问题所在,你正在解决的问题比你实际拥有的更多。

循环访问您的条目(使用foreach循环)并动态创建标签或使用其他控制元素,如Saverio Terracciano所述。

答案 2 :(得分:0)

使用File.ReadLines而不是File.ReadAllLines并使用DataGrid显示您的数据,请参阅 File.ReadLines

答案 3 :(得分:0)

您可以使用几种不同的方法来解决您的问题,这是相当广泛的,假设您没有办法在您可以使用的行数上限:

  • 动态构建和添加显示文件中读取的行所需的控件
  • 使用其他类型的控件,如ListBox或DataGrid