簡體   English   中英

從行數未知的文件(c#)中讀取文本並將行添加到預定義標簽

[英]Read text from file (c#) of unknown number of lines and add lines to predefined labels

我目前正在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);

我會做這樣的事情:

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;
        }
    }

最后將這些標簽添加到帶有坐標等的表格中

您確定陣列總共有10個或更多條目嗎? 我想這就是問題所在,您正在解決的價值超出了實際。

可以遍歷您的條目(使用foreach循環)並動態創建標簽,也可以使用Saverio Terracciano提到的其他控制元素。

使用File.ReadLines代替File.ReadAllLines並使用DataGrid顯示數據,請參見File.ReadLines

可以使用幾種不同的方法來解決問題,這很廣泛,假設您沒有辦法限制行數的上限:

  • 動態構建並添加所需的控件,以顯示在文件中讀取的行
  • 使用其他類型的控件,例如ListBox或DataGrid

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM