如何从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中删除。
这将匹配任何包含一个新行字符的行,可选地以空格开头;
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();
}