2017-09-14 12 views
0

我想刪除所有具有相同文本字符串的行。 例如,過濾的字符串是「MyString」。如果「MyString」在RhichTextBox中出現多次,只需從RichTextBox中刪除整個文本行。因此,只會出現「MyString」首次出現的行。所有其他具有相同字符串的行將被刪除。通過複製字符串刪除RichTextBox行

這是我曾嘗試:

Dim myfilteredstring As String 
    myfilteredstring = "MyString" 
    Dim rtblines As New List(Of String)(RichTextBox1.Lines) 
    Dim Line1 As String 
    Dim Line2 As String 

    Dim j As Integer 
    For j = 0 To RichTextBox1.Lines.Count - 1 
     Line1 = RichTextBox1.Lines(j).ToString 

     Dim k As Integer 
     For k = 0 To RichTextBox1.Lines.Count - 1 
      Line2 = RichTextBox1.Lines(k).ToString 

      If Line1.Contains(myfilteredstring) Then 
       If Line2.Contains(myfilteredstring) Then 
        rtblines.Remove(Line2) 
       End If 
      End If 
     Next 
    Next 
+0

在內部For循環中,您需要在'j + 1'處開始'k'以避免嘗試刪除第一次同意myfilteredstring的行。 '對於k = j + 1到RichTextBox1.Lines.Count - 1' – Blackwood

回答

1

這應該這樣做。該代碼獲取第一次出現的索引。然後,在第一次出現之後,將您的列表向後翻到行,並刪除它們。並用更新後的行列表替換RTB的內容。

Dim myfilteredstring As String 
    myfilteredstring = "MyString" 
    Dim rtblines As New List(Of String)(RichTextBox1.Lines) 

    Dim firstlineFound As Boolean = False 

    Dim indexOfFirstLine As Integer = -1 
    For i As Integer = 0 To rtblines.Count - 1 
     If rtblines(i).Contains(myfilteredstring) Then 
      indexOfFirstLine = i 
      Exit For 
     End If 
    Next 
    For i As Integer = rtblines.Count - 1 To indexOfFirstLine + 1 Step -1 
     If rtblines(i).Contains(myfilteredstring) Then 
      rtblines.RemoveAt(i) 
     End If 
    Next 
    RichTextBox1.Lines = rtblines.ToArray 
+0

這解決了我的問題!非常感謝大衛! – blueye89

-1

我不知道你想做什麼。這將刪除任何包含的行MyString

Dim firstAppearance As String = RichTextBox1.Lines.Where(Function(line As String) line.Contains("MyString")).First() 
RichTextBox1.Lines = RichTextBox1.Lines.Where(Function(line As String) (Not line.Contains("MyString")) OrElse (line = firstAppearance)).ToArray() 
+0

這將刪除Lines集合的第一行 – Steve

+0

檢查編輯的答案。 – Youssef13

+0

不是我的失望,但我不認爲這也可以。讓我測試它 – Steve