从数组中获取每一行并将其放入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(如果你是偏执狂,点击这里)

从数组中获取每一行并将其放入textBox.Text中

使用 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);

您缺少新行。您只是添加到字符串中。这是一种使用linqjoin的漂亮方法

string formattedText = String.Join(Environment.NewLine, File.ReadAllLines(path));

它将占用您的所有行,使用换行符格式化它们,并一次性为您提供一个字符串:)

文本框有一个名为"Mutiline"的属性,您可以尝试将此属性设置为"true"。