Eine bestimmte / leere Zeile im Richtextbox entfernen?

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Eine bestimmte / leere Zeile im Richtextbox entfernen?

    Servus an alle, ich habe versucht die Lösung auf dem Forum zu finden doch das hat nicht geklappt. :(

    Nun die Frage: In einem Richtextbox befindet sich ein Text, ich möchte eine bestimmte Zeile entfernen, wenn die Bedingung erfüllt ist. Nach der Entfernung sollen alle nachkommenden Zeilen um 1 Zeile nach oben rutschen.

    Mein Ansatz für z.B. leere Zeile lautet so:

    VB.NET-Quellcode

    1. If String.IsNullOrWhiteSpace(Zeile(i)) then
    2. [color=#0000FF]Zeile(i) soll entfernt werden[/color]
    3. End if


    Im Grunde soll das ungefähr so aussehen: :rolleyes:
    Vorher
    Nachher
    Zeile1
    Zeile2

    Zeile3
    Zeile1
    Zeile2
    Zeile3


    P.S.: Ich möchte nicht alle leeren Zeilen entfernen! Es geht ums Entfernen einer bestimmten Zeile.
    @mnemonik zwei Möglichkeiten:
    .SelectionStart und .SelectionLength setzen, dabei die Zeilenschaltung berücksichtigen und .SelectedText = "".
    Oder, sofern der Text nicht formatiert ist:

    VB.NET-Quellcode

    1. Dim lst = New List(Of String)(RTB.Lines)
    2. lst.RemoveAt(42) ' die betreffende Zeile
    3. RTB.Lines = lst.ToArray()
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich meine die erste Möglichkeit passt nicht, da sie nur den Inhalt der Zeile löscht und nicht die Zeile selbst. Aber egal...
    --------------------------

    Mich hat die zweite Möglichkeit überzeugt, aber ich krieg es nicht hin das Ganze in eine For-Schleife zu packen.
    Ich versuche beispielsweise die Zeilen 4 und 5 zu entfernen, doch das Programm entfernt die Zeilen 4 und 6. Das Problem liegt offensichtlich an der Reihenfolge der Zeilen, die am Anfang gemerkt wird.

    VB.NET-Quellcode

    1. Dim lst = New List(Of String)(RichTextBox1.Lines)
    2. For i = 0 To 9
    3. If i = 4 Or i = 5 Then
    4. lst.RemoveAt(i - 1) ' die betreffende Zeile
    5. RichTextBox1.Lines = lst.ToArray()
    6. End If
    7. Next


    *Vollzitat entfernt* ~NoFear23m

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    mnemonik schrieb:

    Ich meine die erste Möglichkeit passt nicht, da sie nur den Inhalt der Zeile löscht und nicht die Zeile selbst.
    Zeilenschaltung berücksichtigen, nimm ein Zeichen mehr, also .SelectionLength += 1 oder so.

    mnemonik schrieb:

    doch das Programm entfernt die Zeilen 4 und 6.
    Genau das hast Du programmiert. ;)
    Nachdem die Zeile 4 raus ist, ist Zeile 6 nun Zeile 5.
    Entweder

    VB.NET-Quellcode

    1. lst.RemoveAt(4)
    2. lst.RemoveAt(4)
    oder

    VB.NET-Quellcode

    1. lst.RemoveAt(5)
    2. lst.RemoveAt(4)
    ohne Schleife.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    mnemonik schrieb:

    z.B. von Zeile(3) bis Zeile(9)
    Das sieht noch alles hier im Thread.
    Mach Dir eine kleine Test-Applikation, in der Du eine RTB mit Zeilen fortlaufender Numeriereung erstellst und dann das löschst was Du willst.
    Und prüfe nachg jedem Schritt, ob das was sie tut auch das ist, was sie tun soll.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!