C# 删除.NET RichTextBox中的特定行
如何删除RichTextBox中的特定文本行?我不知道是否有一种简单的方法可以一步完成。您可以使用富文本框的.Text属性上的.Split函数来获取行数组C# 删除.NET RichTextBox中的特定行,c#,.net,winforms,richtextbox,C#,.net,Winforms,Richtextbox,如何删除RichTextBox中的特定文本行?我不知道是否有一种简单的方法可以一步完成。您可以使用富文本框的.Text属性上的.Split函数来获取行数组 string[] lines = richTextBox1.Text.Split( "\n".ToCharArray() ) 然后在删除所需的行并将其复制回富文本框的.text属性后,编写一些内容将数组重新组合为单个文本字符串 下面是一个简单的例子: string[] lines = richTextBox1.Text.Sp
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;
string[]line=richTextBox1.Text.Split(“\n.ToCharArray());
int lineToDelete=2//基于O的行号
string richText=string.Empty;
对于(int x=0;x
如果您的富文本框的行数超过10行左右,最好使用StringBuilder而不是字符串来编写新文本。在文本范围内查找要删除的文本,找到并将文本设置为空,现在它将从文档中消失。另一种解决方案:
private void DeleteLine(int a_line)
{
int start_index = richTextBox.GetFirstCharIndexFromLine(a_line);
int count = richTextBox.Lines[a_line].Length;
// Eat new line chars
if (a_line < richTextBox.Lines.Length - 1)
{
count += richTextBox.GetFirstCharIndexFromLine(a_line + 1) -
((start_index + count - 1) + 1);
}
richTextBox.Text = richTextBox.Text.Remove(start_index, count);
}
private void DeleteLine(内线)
{
int start_index=richTextBox.GetFirstCharIndexFromLine(一行);
int count=richTextBox.Lines[a_line].长度;
//吃生菜
if(a_行
试试这个:
Dim lst As New ListBox
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Controls.Add(lst)
For Each cosa As String In Me.RichTextBox1.Lines
lst.Items.Add(cosa)
Next
lst.Items.RemoveAt(2) 'the integer value must be the line that you want to remove -1
Me.RichTextBox1.Text = String.Empty
For i As Integer = 0 To lst.Items.Count - 1
If Me.RichTextBox1.Text = String.Empty Then
Me.RichTextBox1.Text = lst.Items.Item(i)
Else
MeMe.RichTextBox1.Text = Me.RichTextBox1.Text & Environment.NewLine & lst.Items.Item(i).ToString
End If
Next
End Sub
基于tomanu的解决方案,但没有开销
int start_index = LogBox.GetFirstCharIndexFromLine(linescount);
int count = LogBox.GetFirstCharIndexFromLine(linescount + 1) - start_index;
LogBox.Text = LogBox.Text.Remove(start_index, count);
请注意,这里我的lineScont是lineScont-2。这也可以做到这一点(如果您可以在表单代码中处理诸如++之类的事情)。保留文本格式。请记住“ReadOnly”属性对您和用户都有效
richTextBox.SelectionStart = richTextBox.GetFirstCharIndexFromLine(your_line);
richTextBox.SelectionLength = this.richTextBox.Lines[your_line].Length+1;
this.richTextBox.SelectedText = String.Empty;
这是我的单元测试实现
public static void DeleteLine([NotNull] this RichTextBox pRichTextBox, int pLineIndex) {
if (pLineIndex < 0 || pLineIndex >= pRichTextBox.Lines.Length)
throw new InvalidOperationException("There is no such line.");
var start = pRichTextBox.GetFirstCharIndexFromLine(pLineIndex);
var isLastLine = pLineIndex == pRichTextBox.Lines.Length - 1;
var nextLineIndex = pLineIndex + 1;
var end = isLastLine
? pRichTextBox.Text.Length - 1
: pRichTextBox.GetFirstCharIndexFromLine(nextLineIndex) - 1;
var length = end - start + 1;
pRichTextBox.Text = pRichTextBox.Text.Remove(start, length);
}
有很多很好的答案,但我发现很多都很复杂
string[] LinesArray = this.richTextBox1.Lines;
this.richTextBox1.Clear();
for (int line = 0; line < LinesArray.Length; line++)
{
if (!LinesArray[line].Contains("< Test Text To Remove >"))
{
this.richTextBox1.AppendText(LinesArray[line] + Environment.NewLine);
}
}
string[]LinesArray=this.richTextBox1.Lines;
this.richTextBox1.Clear();
对于(int line=0;line”)
{
this.richTextBox1.AppendText(LinesArray[line]+Environment.NewLine);
}
}
我希望这对其他人有所帮助;0)int LineToDelete=50;
List lines=richTextBox1.lines.ToList();
线条。删除(线条删除);
richTextBox1.Lines=Lines.ToArray();
这会随着行数的增加而变慢。你是对的,我应该在其中添加警告,但如果行数合理(小于100?),应该可以。我试过一次。它丢失了我的RTF格式,这让我很头疼。只有链接的答案不好D编辑它,我会投你一票的,先生。这对框中的最后一行有用吗?我喜欢tomanu的int count=richTextBox.Lines[a_line].Length代码>行更好。在我的测试中运行它,不,它没有,尽管它可能与您在最后一行中所说的有关,但不确定这意味着什么。“eat new line chars”块做什么?不是-1+1抵消了吗?它的计算结果似乎是count+=0
实际上……好吧,我明白了,长度不包括行尾字符,忽略了这一点。这将删除现有文本中的所有格式。如果不想删除格式,则必须按照“创建选择,然后清除选择”的路线进行。请参阅其他答案。这是唯一不会从现有文本中删除格式的方法。设置文本属性将清除所有现有格式。还要注意的是,如果您的文本框是只读的,请在修改SelectedText之前将readonly设置为false,然后在修改后将readonly恢复为true。当回答旧问题时,如果您包含一些上下文来解释您的答案如何有帮助,则您的答案对其他StackOverflow用户会更有用。请参阅:。
string[] LinesArray = this.richTextBox1.Lines;
this.richTextBox1.Clear();
for (int line = 0; line < LinesArray.Length; line++)
{
if (!LinesArray[line].Contains("< Test Text To Remove >"))
{
this.richTextBox1.AppendText(LinesArray[line] + Environment.NewLine);
}
}
int LineToDelete = 50;
List<string> lines = richTextBox1.Lines.ToList();
lines.Remove(LineToDelete);
richTextBox1.Lines = lines.ToArray();