【问题标题】:Getting every line from an array and putting that in textBox.Text从数组中获取每一行并将其放入 textBox.Text
【发布时间】:2016-02-20 01:58:36
【问题描述】:

我正在编写一个简单的文本编辑器,目前我在打开功能时遇到了问题。我可以成功地从文件中读取文本,但是我遇到的麻烦是将它导入到文本框中。另外,我知道已经有人问过这样的问题,但是我无法从其中任何一个那里得到可行的解决方案(相信我,我已经尝试了好几个小时)这是我当前打开的函数:

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。
  • Lines 是一个数组,包含读入的文本。
  • 您可以忽略底部的catch,这只是为了防止崩溃。

好的,上面的代码给出以下输出:

hellotherehow are you?

如你所料,我正在阅读的文件中有一些换行符:

hello
there
how are you?

当然,这就是我想在 mainTextEntry.Text 中打印的内容。我该怎么做呢?

编辑:完整的源代码可以在这里找到:MainWin.cs(如果你是偏执狂click here

【问题讨论】:

  • mainTextEntry.Lines = File.ReadAllLines(path);
  • 我假设您已将 multiline 设置为 true?
  • 不 - 这很好。我只是确保否则Environment.NewLine 是多余的。奇怪的问题。
  • @odixon 试试我调整后的代码中的代码。 StringBuilder 对此太过分了,而且可能是多余的。但我想确定一下。
  • @odixon - 老实说,您选择什么选项并不重要。除非您出于格式化目的需要 RTB 的功能,否则它是矫枉过正的。老实说,我认为您的多行属性设置为 false。

标签: c# winforms visual-studio


【解决方案1】:

使用Environment.NewLine 打破演示文稿中的内容。

mainTextEntry.AppendText(String.Join(Environment.NewLine, File.ReadAllLines(path)));

【讨论】:

  • 无论我做什么,我总是在我的行的开头得到一个额外的、不需要的回报!
  • 文件是否包含空白行?
  • 没有。该文件纯粹是我提出的问题。
  • 是的,额外的行仍然存在同样的问题。它已经设置为 true,但只是为了确保我在尝试之上再次编写它,但仍然没有任何工作......
【解决方案2】:

这可能有点矫枉过正,但这对我有用。但其他选项应该有效。我会说,你得到这个结果的可能性很大,因为在你的代码中的某个地方——特别是如果你以编程方式创建了文本框——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);

【讨论】:

    【解决方案3】:

    您缺少新行。您只是添加到字符串中。 这是使用linqjoin 的绝妙方法

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

    它会占用你所有的行,用你的换行符格式化它们,然后一次性给你一个字符串:)

    【讨论】:

    • @odixon 那是因为语法不正确。检查 Hari Prasad 帖子的正确用法。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      • 1970-01-01
      • 2019-07-07
      • 2015-08-12
      相关资源
      最近更新 更多