将文本文件中的数据加载到Windows窗体

时间:2016-11-27 14:56:36

标签: c#

我需要一些帮助,将文本文件中的文本加载到我的某个表单上的多个文本框和标签中。我的表单有5个文本框和标签。它们被标记为'txtPlayer1','lblPlayer1Points'等。

我在一个文本文件中有5行代码,它是通过另一种形式保存的,文本文件中的数据如下所示:

  

第一名:AK - Aaron,积分:44
  第二名:GJ - George,积分:24
  第三名:SB - Sarah,积分:40
  第四名:JB - Jason,积分:29
  第五名:JS - Jacob,积分:22
  总分:159

无论如何,我可以将第一行(AK - Aaron)的玩家名称放入'txtPlayer1'文本框,然后将她的积分(44)放入'lblPlayer1Points'吗?

理想情况下,我希望每行完成此操作,因此我最终使用'txtPlayer2' 'GJ - George'和'lblPlayer2Points'一直是'24'直到第五行完成。

编辑: 这是我用来打开表单上的文本文件的代码。按下一个按钮,执行此代码:

        OpenFileDialog FileDialog = new OpenFileDialog();

        FileDialog.Title = "Select Text File!";
        FileDialog.InitialDirectory = @"c:\\";
        FileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";

        if (FileDialog.ShowDialog() == DialogResult.OK)
        { string fileName;
            fileName = FileDialog.FileName;
            Properties.Settings.Default.fullPath = Path.Combine(Directory.GetCurrentDirectory(), fileName);

现在我有这段代码适用于第一行但不适用于其他行:

string filePath = Properties.Settings.Default.fullPath;

        string[] lines = null;
        lines = File.ReadAllLines(filePath);                 



         //READING TOP LINE

                string textLine = lines[0];
                string[] stringSplit = textLine.Split(' ');

                string firstName = stringSplit[1];
                string firstPoints = stringSplit[3];
                txtFirstName.Text = FirstName;
                lblFirstPoints.Text = firstPoints;

如果我尝试将其应用于其他行,则只会导致我的表单崩溃。

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

        string ctlName;
        Control[] matches;
        Control player, score;
        string[] lines = File.ReadAllLines(filePath);
        for(int i = 0; i < 5; i++)
        {
            player = null;
            ctlName = "txtPlayer" + (i + 1).ToString();
            matches = this.Controls.Find(ctlName, true);
            if (matches.Length > 0)
            {
                player = matches[0];
                player.Text = "";
            }

            score = null;
            ctlName = "lblPlayer" + (i + 1).ToString() + "Points";
            matches = this.Controls.Find(ctlName, true);
            if (matches.Length > 0)
            {
                score = matches[0];
                score.Text = "";
            }

            if (i < lines.GetUpperBound(0))
            {
                string[] parts = lines[i].Split(",".ToCharArray());
                if (parts.Length == 2)
                {
                    string[] nameParts = parts[0].Split(":".ToCharArray());
                    if (nameParts.Length == 2)
                    {
                        if (player != null)
                        {
                            player.Text = nameParts[1].Trim();
                        }
                    }
                    string[] scoreParts = parts[1].Split(":".ToCharArray());
                    if (scoreParts.Length == 2)
                    {
                        if (score != null)
                        {
                            score.Text = scoreParts[1].Trim();
                        }
                    }
                }
            }
        }