Wie Anfang jeder selektierten Zeile in einer TextBox/RichTextBox herausfinden?

  • VB.NET
  • .NET 4.5

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

    Wie Anfang jeder selektierten Zeile in einer TextBox/RichTextBox herausfinden?

    Ich wollte in meinem Projekt eine Textbox bzw. Richtextbox mit einer Funktion ausstatten, welche es mir
    ermöglicht das alle selektierten Zeilen am Zeilenanfang das Zeichen ' erhalten, ähnlich wie es auch VS
    macht.

    Nun schaue ich mir schon einige Zeit die vorhandenen Eigenschaften bzw. Methoden der Boxen an, komme aber nicht weiter.
    Ist das mit den angebotenen Eigenschaften und Methoden überhaupt umsetzbar?
    Aktuelles Projekt: Z80 Disassembler für Schneider/Amstrad CPC :love:
    Fragt mich nicht warum, aber ich tu's trotzdem:

    VB.NET-Quellcode

    1. Private Sub BtnCommentOutSelectedLines_Click(sender As Object, e As EventArgs) Handles BtnCommentOutSelectedLines.Click
    2. SetSelectionStartToPreviousLineStartOrTextStart()
    3. Dim SelectedTextLines = GetSelectedTextLines()
    4. Dim SelectedTextLinesCommentedOut = GetSelectedTextLinesCommentedOut(SelectedTextLines)
    5. ReplaceSelectionBy(SelectedTextLinesCommentedOut)
    6. End Sub
    7. Private Sub SetSelectionStartToPreviousLineStartOrTextStart()
    8. Do Until RichTextBox1.SelectedText.StartsWith(Convert.ToChar(10)) OrElse RichTextBox1.SelectionStart = 0
    9. RichTextBox1.SelectionStart -= 1
    10. Loop
    11. End Sub
    12. Private Function GetSelectedTextLines() As IEnumerable(Of String)
    13. Return RichTextBox1.SelectedText.Split(Convert.ToChar(10))
    14. End Function
    15. Private Function GetSelectedTextLinesCommentedOut(SelectedTextLines As IEnumerable(Of String)) As IEnumerable(Of String)
    16. Return SelectedTextLines.Select(Function(x) If(Not String.IsNullOrEmpty(x), "'", "") & x)
    17. End Function
    18. Private Sub ReplaceSelectionBy(SelectedTextLinesCommentedOut As IEnumerable(Of String))
    19. RichTextBox1.SelectedText = String.Join(Convert.ToChar(10), SelectedTextLinesCommentedOut)
    20. End Sub
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.
    Nach der Antwort von EDR kam mir ein Gedanke wie ich es lösen könnte. Ich war vorher gedanklich in einer ganz anderen Richtung unterwegs = Sackgasse.
    Meine Lösung ist ähnlich wie die von Vapori, allerdings ohne Split sondern über IndexOf. Da war ich gestern gedanklich aber sehr umständlich
    unterwegs. ||

    Danke @ErfinderDesRades und @VaporiZed. :)
    Aktuelles Projekt: Z80 Disassembler für Schneider/Amstrad CPC :love:
    @oobdoo Meinst Du alle Zeilenenden mit Zeilenende-Zeichen oder auch "weiche" Zeilenschaltungen (Shift+Enter in Word) oder Zeilenumbruch?
    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!