从数组中获取每一行并将其放入textBox.Text中
本文关键字:Text textBox 一行 获取 数组 | 更新日期: 2023-09-27 18:35:30
我正在编写一个简单的文本编辑器,目前我在打开函数时遇到问题。我可以成功地从文件中读取文本,但是我遇到的麻烦是将其导入文本框。另外,我知道已经提出了这样的问题,但是我无法从其中任何一个获得有效的解决方案(相信我,我已经尝试了几个小时)。所以这是我目前的打开函数:
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
OpenFileDialog openDialog = new OpenFileDialog();
openDialog.Filter = ".TXT File|*.txt|.BAT File|*.bat|All Files|*.*";
openDialog.Title = "Open file";
openDialog.ShowDialog();
if (openDialog.FileName != "")
{
path = openDialog.FileName;
try
{
string[] lines = File.ReadAllLines(path);
//all text from file is now stored in the array "lines"
//put it into text box
for (int i = 0; i < lines.Length; i++)
{
mainTextEntry.AppendText(lines[i]);
}
}
catch (Exception ex)
{
MessageBox.Show("Error while opening file. Original error:'n'n" + ex);
}
}
}
请允许我指出这段代码中的几件事:
- 我的文本框称为mainTextEntry。
- 我的 openFileDialog 称为 openDialog。
- 行是一个数组,包含文本中的读取。
- 您可以忽略底部的捕获,这只是为了防止崩溃。
好的,所以上面的代码给出以下输出:
hellotherehow are you?
正如您所猜测的,我正在读取的文件中有一些换行符:
hello
there
how are you?
当然,这就是我想在mainTextEntry.Text中打印的内容。我将如何做到这一点?
编辑:完整的源代码可以在这里找到:MainWin.cs(如果你是偏执狂,点击这里)
使用 Environment.NewLine
中断演示文稿中的内容。
mainTextEntry.AppendText(String.Join(Environment.NewLine, File.ReadAllLines(path)));
这可能有点矫枉过正,但这对我有用。但其他选择应该有效。我想说的是,很有可能你得到这个结果是因为在你的代码中的某个地方 - 特别是如果你以编程方式创建文本框 - 当它需要为真时,mainTextEntry.MultiLine
是假的。如果我在 vs 中禁用多行,我会得到与您收到的相同结果。
//...
mainTextEntry.Multiline = true; //add this just to be sure
var sb = new StringBuilder();
for (int i = 0; i < lines.Length; i++)
{
sb.AppendLine(lines[i]);
}
mainTextEntry.Text = sb.ToString();
// or
mainTextEntry.Multiline = true; //add this just to be sure
for (int i = 0; i < lines.Length; i++)
{
mainTextEntry.AppendLine(lines[i] + Environment.NewLine);
}
尝试在显示时将Environment.NewLine
附加到末尾。
mainTextEntry.AppendText(lines[i] + Environment.NewLine);
您缺少新行。您只是添加到字符串中。这是一种使用linq
和join
的漂亮方法
string formattedText = String.Join(Environment.NewLine, File.ReadAllLines(path));
它将占用您的所有行,使用换行符格式化它们,并一次性为您提供一个字符串:)
文本框有一个名为"Mutiline"的属性,您可以尝试将此属性设置为"true"。