2017-09-14 13 views
0

同じテキスト文字列を持つすべての行を削除しようとしています。 たとえば、フィルタリングされた文字列は "MyString"です。 RhichTextBoxで「MyString」が複数回表示される場合は、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

内側のループでは、最初の一致が 'myfilteredstring'の行を削除しようとするのを避けるために' j + 1'で 'k'を開始する必要があります。 'For k = j + 1 to 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

これはラインコレクションの最初の行も削除します – Steve

+0

編集された答えを確認してください。 – Youssef13

+0

私のdownvoteではありませんが、私はどちらかが動作するとは思わない。私はそれを試してみましょう – Steve

関連する問題