我的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内容只是文本时,你的建议很有用,但我的富人也有图片和表格。当我使用rtb.Text =或rtfBox.Text =或richTextBox1.Text =图像和表格将从richbox中删除。
答案 0 :(得分:4)
这将匹配包含一个新行字符的任何行,optionaly以任何空格开头;
rtb.Text = Regex.Replace(rtb.Text, @"^\s*$(\n|\r|\r\n)", "", RegexOptions.Multiline);
(就像其他文字&amp;替换这将打破任何格式,如果有的话)
答案 1 :(得分:0)
从此question:
我不知道是否有一个简单的方法可以一步到位。您可以在富文本框的.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而不是字符串来组成新文本。
答案 2 :(得分:0)
很难确切地说出你在做什么,但看起来你正在环绕外部foreach的线路并看着rtfBox.Lines
看看这个是否......我不知道......这部分很奇怪。然后你正在改变rtfBox.Text
即使你的内在逻辑是正确的,这也行不通。设置rtfBox.Text时,更改要循环的项目。然后你继续处理一份无关紧要的原件。
我建议你不要这样做...不要担心Lines集合只是根据你的需要修复Text。这是一个建议(我没有测试)
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.
答案 3 :(得分:0)
这将删除文本中的所有行:
string value = Regex.Replace(someText, @"(\n|\r)", "", RegexOptions.Multiline);
答案 4 :(得分:0)
我遇到了同样的问题。我的Windows窗体上有一个富文本框(rtb),用于通过复制/粘贴输入信息。如果用户碰巧出现空白行并将该数据粘贴到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;