How can I delete words from a "string" in the RichTextBox.

Example:

[02/04/2014 17:04:21] Thread 1 Banned: xxxxxxxxx@xxxx.tld 
[02/04/2014 17:04:21] Thread 2: Banned: xxxxxxxxx@xxxx.tld 
[02/04/2014 17:04:21] Thread 3: Banned: xxxxxxxxx@xxxx.tld 
[02/04/2014 17:04:21] Thread 4: Banned: xxxxxxxxx@xxxx.tld 

I would like to delete all rows with the word "Banned" in the line.

How can I do this?

Thanks in advance.

有帮助吗?

解决方案

You can use LINQ to remove all the lines that contains the work "Banned":

richTextBox1.Lines = richTextBox1.Lines
    .Where((line, b) => !line.Contains("Banned"))
    .Select((line, b) => line).ToArray();

其他提示

I know this method looks ugly. But, if you don't want to remove formatting from the existing text in the richtextbox then you should use this method. This example is not tested but, you can get logic from here.

for (int iLine = 0; iLine < rtf.Lines.Length; iLine++)
{
    if (rtf.Lines[iLine].Contains("Banned"))
    {
        int iIndex = rtf.Text.IndexOf(rtf.Lines[iLine]);
        rtf.SelectionStart = iIndex;
        rtf.SelectionLength = rtf.Lines[iLine].Length;
        rtf.SelectedText = string.Empty;
        iLine--; //-- is beacause you are removing a line from the Lines array. 
    }
}

You could try use the answer from this post - I would adjust the code slightly to neaten it up a bit.

URL: what is the best way to remove words from richtextbox?

Code snippet from the URL (which would need to be tidied up).

string[] lines = richTextBox1.Lines;
List<string> linesToAdd = new List<string>();
string filterString = "Banned".";
foreach (string s in lines)
{
    string temp = s;
    if (s.Contains(filterString))
       temp = s.Replace(filterString, string.Empty);
    linesToAdd.Add(temp);
 }
 richTextBox1.Lines = linesToAdd.ToArray(); 

I would adjust the above code and whilst still using the loop, just check if the line contains the word you looking for "Banned" and then remove the line / do what is need with it.

I hope this helps?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top