我需要一些帮助,将文本文件中的文本加载到我的某个表单上的多个文本框和标签中。我的表单有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;
如果我尝试将其应用于其他行,则只会导致我的表单崩溃。
答案 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();
}
}
}
}
}