Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 删除.NET RichTextBox中的特定行_C#_.net_Winforms_Richtextbox - Fatal编程技术网

C# 删除.NET RichTextBox中的特定行

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

如何删除RichTextBox中的特定文本行?

我不知道是否有一种简单的方法可以一步完成。您可以使用富文本框的.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;
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();