2011-04-23 181 views
2

我的富文本框中有几行空行,我需要将它们从富文本删除。如何从富文本框中删除空白行

我可以罚款空白行,但不能删除它们。我该怎么做?我使用此代码,但它没有工作:

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内容是文本您的建议是有用的,但我有图片和表格,我太丰富。当我使用rtb.Text =或rtfBox.Text =或richTextBox1.Text =图像和表格将从richbox中删除。

+0

如果您需要提供更多信息,请修改您的问题。此外,尽量不要在您的帖子中使用“文字说”缩写。 – 2011-04-24 13:31:43

回答

3

这将匹配包含新行字符中的一个,与任何空白optionaly开始的任何线;

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

(像其他文本&更换,否则会破坏任何格式应该有任何)

+0

谢谢亚历克斯,妳救救我;) – Bahaareh 2011-04-24 11:42:37

+0

rtfBox.Rtf = Regex.Replace(rtfBox.Rtf,@“\\ par(\ n | \ r | \ r \ n)”,“”,RegexOptions.Multiline); – Bahaareh 2011-04-25 09:01:55

0

从这个question

我不知道是否有一个简单的方法来做到这一步。您可以使用丰富的文本框的。文本属性.Split函数来获取行

字符串[] =行richTextBox1.Text.Split(“\ n” .ToCharArray())

数组

,然后在删除所需的行之后再编写一些内容以将数组重新组合为单个文本字符串,并将其复制回富文本框的.Text属性。

这里有一个简单的例子:如果您的富文本框将不得不超过10行左右,这将是使用StringBuilder而不是字符串来组成新的文本是一个好主意

  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; 

用。

0

很难确切地说出你在做什么,但它看起来像是在外部foreach中循环查看rtfBox.Lines以查看这个是否......我不知道......这部分很奇怪。那么你正在改变rtfBox.Text

即使你的内在逻辑是正确的,这是行不通的。当你设置rtfBox.Text你改变你正在循环的项目。然后,你继续在原件的副本上工作,这并不重要。

我建议你不要这样做......不要担心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. 
0

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

字符串值= Regex.Replace(someText ,@“(\ n | \ r)”,“”,RegexOptions.Multiline);