如何从richbox中删除空行

本文关键字:删除 richbox | 更新日期: 2023-09-27 17:52:12

我的richbox中有几个空白行,我需要从rich中删除它们。

我可以发现空白行,但不能删除它们。我该怎么做呢?我使用了这段代码,但它不起作用:

RichTextBox rtfBox = new RichTextBox();
rtfBox.Rtf = SOME NTEXT DATA;
int lineNumber = 0;
foreach (string a in rtfBox.Lines)
{
    if (a == "")
    {
        int start_index = rtfBox.GetFirstCharIndexFromLine(lineNumber);
        int countLineChar = rtfBox.Lines[lineNumber].Length;
        // Eat new line chars
        if (lineNumber < rtfBox.Lines.Length - 1)
        {
            countLineChar += rtfBox.GetFirstCharIndexFromLine(lineNumber + 1) -
                ((start_index + countLineChar - 1) + 1);
        }
        rtfBox.Text = rtfBox.Text.Remove(start_index, countLineChar);
    }
    else
        lineNumber++;
}

这一行rtfBox.Text = rtfBox.Text.Remove(start_index, countLineChar);不工作。

感谢

谢谢大家,当richbox内容只是文本时,您的建议是有用的,但我在我的rich中也有图像和表。当我使用rth时。Text =或rtfBox。Text =或richTextBox1。文本=图像和表格将从richbox中删除。

如何从richbox中删除空行

这将匹配任何包含一个新行字符的行,可选地以空格开头;

rtb.Text = Regex.Replace(rtb.Text, @"^'s*$('n|'r|'r'n)", "", RegexOptions.Multiline);

(像其他文本&替换它会破坏任何格式(如果有的话)

很难确切地告诉你在做什么,但看起来你正在循环在外部foreach中的行,并查看rtfBox.Lines,看看这个是否…我不知道……这部分很奇怪。那么你就是在改变rtfBox.Text

即使你的内在逻辑是正确的,这也行不通。当你设置rtfBox。更改正在循环的项目的文本。然后你继续在原始文件的副本上工作,这无关紧要。

我建议你不要这样做。不要担心Lines集合,只要固定文本,无论你想要什么。这是一个建议(我没有测试)
rtfBox.Text = rtfBox.Text.Replace("'r'n'r'n","'r'n");
rtfBox.Text = refBox.Text.Replace("'n'n","'n");

或者更好的

rtfBox.Text = refBox.Text.Replace(Environement.NewLine+Environement.NewLine,Environement.NewLine);

你可能需要把这些放在一个循环中,直到你找不到匹配。

例如

string doubleNewLine = Environement.NewLine+Environement.NewLine;
while (rtfBox.Text.Contains(doubleNewLine)
{
   refBox.Text = refBox.Text.Replace(doubleNewLine,Environement.NewLine);
}
// deal with special case of text box starting with newline.

我也有同样的问题。我有一个丰富的文本框(rtb)在我的Windows窗体,通过复制/粘贴输入信息。如果用户碰巧得到一个空行,并将该数据粘贴到rtb中。如何清理rtb,使它只有行有用的数据。我的过程有点不同。

                string[] lines = RichTextBox1.Lines.ToArray(); //This is to split the rich text box into an array
                string richText = string.Empty;
                foreach (string line in lines)
                {
                    if (!string.IsNullOrEmpty(line))
                    {//Here is were you re-build the text in the rich text box with lines that have some data in them
                        richText += line;
                        richText += Environment.NewLine;
                    }
                    else
                        continue;
                }
                richText = richText.Substring(0, richText.Length - 2); //Need to remove the last Environment.NewLine, else it will look at it as an other line in the rick text box.
                RichTextBox1.Text = richText;

这将从文本中删除所有行:

string value = Regex.Replace(someText, @"('n|'r)", "", RegexOptions.Multiline);

从这个问题:

我不知道是否有简单的方法一步完成它。您可以在富文本框的。text属性上使用。split函数来获取行数组

string[] lines = richTextBox1.Text.Split( "'n".ToCharArray() );

,然后写一些东西重新组装成一个单一的文本字符串数组后,删除你想要的行,并复制回富文本框的。text属性。

下面是一个简单的例子:

            string[] lines = richTextBox1.Text.Split("'n".ToCharArray() );

            int lineToDelete = 2;                   //O-based line number
            string richText = string.Empty;
            for ( int x = 0 ; x < lines.GetLength( 0 ) ; x++ )
            {
                    if ( x != lineToDelete )
                    {
                            richText += lines[ x ];
                            richText += Environment.NewLine;
                    }
            }
            richTextBox1.Text = richText;

如果您的富文本框将超过10行左右,那么使用StringBuilder而不是字符串来组合新文本将是一个好主意。

行转换为列表。反向读取list并删除list中的空字符串。

public void RemoveEmptyLines(RichTextBox richBox)
{
    List<string> Lines= richBox.Lines.ToList();
        //using forr
        for (int i = Lines.Count - 1; i >= 0; i--)
        {
            if (Lines[i].Trim() == string.Empty)
            {
                Lines.RemoveAt(i);
            }
        }
      ` richBox.Lines = Lines.ToArray();
}