private void sessionText()
{
try
{
System.IO.TextReader r = new System.IO.StreamReader("saved.txt");
this.textBox1.Text = r.ReadLine();
r.Close();
}
catch (Exception x)
{
MessageBox.Show("Exception " +x);
}
}
它将行读入textBox1,但现在我正在扩展我的应用程序。我添加了5个textBoxes,现在我正在尝试逐行加载每个保存的数据。如何将每一行加载到下一个文本框中?
Line 0 -> textBox1
Line 1 -> textBox2
Line 2 -> textBox3
答案 0 :(得分:3)
如果您不希望这是一个通用方法,那么只需再次调用ReadLine方法并将结果分配给textBox2.Text,依此类推:
private void sessionText()
{
try
{
using (System.IO.TextReader r = new System.IO.StreamReader("saved.txt"))
{
this.textBox1.Text = r.ReadLine();
this.textBox2.Text = r.ReadLine();
this.textBox3.Text = r.ReadLine();
}
}
catch (Exception x)
{
MessageBox.Show("Exception " +x);
}
}
请注意,TextReader应该是Disposed。那就是你需要调用它的Close()或Dispose()方法,因为它是一个IDisposable。实际上,必须处理任何实现IDisposable接口的对象。
通常使用“using”构造来执行此操作。但在你的情况下,因为你也有一个尝试捕获,你可以这样做:
private void button1_Click(object sender, EventArgs e)
{
System.IO.TextReader reader = null;
try
{
reader = new System.IO.StreamReader("saved.txt");
textBox1.Text = reader.ReadLine();
textBox2.Text = reader.ReadLine();
textBox3.Text = reader.ReadLine();
}
catch (Exception x)
{
MessageBox.Show("Exception " + x);
}
finally
{
if (reader != null)
reader.Close();
}
}
虽然您假设使用此代码。通过此代码,我的意思是我列出的所有代码以及您列出的代码,也就是说,您正在阅读的文件中保证有3行文本。并非总是如此(在你的情况下,你可能想看一种更具防御性的做法。
此外,您已经必须将代码从2行和1个文本框修改为3行和3个文本框。也许现在是时候考虑实现这一点,以便下次(当你的要求从3到10时)你不必修改你的代码,而是让它知道(一些如何)关于附加文本框和它应该做正确的事情?或者也许你的应用程序中有一些东西知道“行”的数量(无论它们表示什么),你可以使用这些信息吗?
只是一个想法。
答案 1 :(得分:1)
试试此代码
using (StreamReader sr = new StreamReader(@"saved.txt"))
{
string[] inputData = sr.ReadToEnd().Split(new string[] { "\n","\r","\n\r" },
StringSplitOptions.RemoveEmptyEntries);
var textboxes = (from Control textbox in this.Controls
where textbox is TextBox
select textbox).ToArray();
for (int i = 0; i < textboxes.Count(); i++)
{
textboxes[i].Text = inputData[i];
}
}
答案 2 :(得分:0)
与Anuraj一样,建议者,最好的方法是创建一个textBoxes数组,并用每个循环使用的行填充它们。 但他的建议暗示LinQ选择以您想要的确切顺序返回textBoxes。也许有几次尝试你可以做到。
试试这个: 在表单的_Load中准备数组:
Texts = new TextBox[10];
Texts[0] = txtBox1;
Texts[1] = txtBox2;
等等。
之后,您可以在一个循环中逐行阅读并分配给文本[cnt]
在.NET删除VB6的Index属性以创建控件数组之后,这也是一个工作区。