Cursor in RichTextBox auf Position x,y setzen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von oobdoo.

    Cursor in RichTextBox auf Position x,y setzen

    Ich benötige eine Funktion welche es mir erlaubt den Cursor innerhalb einer gefüllten RichTextBox auf die Position X,Y zu setzen.
    Eigene Versuche und Google haben mich bisher nicht zum Ziel geführt. Hat jemand eine Idee wie man das hinbekommen kann?

    Wie immer finde ich dann eine Lösung wenn ich eine Anfrage gemacht habe. :rolleyes:

    VB.NET-Quellcode

    1. Dim YPosition As Integer = gewünschte Zeile
    2. Dim AnzahlZeichen As Integer = 0
    3. Dim Anzahl As Integer = 0
    4. For i = 0 To AnzahlZeilen
    5. Anzahl = rtbEingabe.Lines(i).Length + 1
    6. AnzahlZeichen += Anzahl
    7. If i = YPosition Then
    8. Exit For
    9. End If
    10. Next
    11. rtbEingabe.Focus()
    12. rtbEingabe.SelectionStart = AnzahlZeichen - Anzahl
    Aktuelles Projekt: Z80 Disassembler für Schneider/Amstrad CPC :love:

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

    Wenn Du meinst: Zeile x, Spalte y, dann: Schlecht gesucht, würd ich sagen. SelectionStart ist das richtige. da das allerdings nur der Zeichenindex ist, den Du da festlegen kannst, musst Du erst mit .Lines die vorhergehenden Zeilen (falls y > 0) durchgehen und deren Länge zusammenzählen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hier dein Ansatz nochmal in etwas einfacherer Form:

    Code (getestet)

    VB.NET-Quellcode

    1. Public Sub SetTextPosition(Zeile, Zeichen)
    2. Dim Zeilen As List(Of String) = RichTextBox1.Lines.ToList
    3. Dim Anzahl As Integer = 0
    4. Anzahl = Zeilen.Where(Function(n) Zeilen.IndexOf(n) < (Zeile - 1)).Select(Function(n) n.Length + 1).Sum + (Zeichen - 1)
    5. Me.ActiveControl = RichTextBox1
    6. RichTextBox1.SelectionStart = Anzahl
    7. RichTextBox1.SelectionLength = 1
    8. End Sub


    Wenn du das Zeichen nicht markiert haben willst dann entferne einfach die Zeile RichTextBox1.SelectionLength = 1 oder ersetze 1 durch 0.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    VaporiZed schrieb:

    Schlecht gesucht

    Nee, eher schlecht selbst geschrieben. ;)

    Die Lösung kommt von mir selbst. Mein gewüschtes X,Y hat nur für ein Y gereicht, was aber nicht schlimm ist weil ich damit auch weiter gekommen bin.
    Später werde ich bestimmt auf die Lösung von @Yanbel zurück kommen.

    Trotzdem vielen Dank. :)
    Aktuelles Projekt: Z80 Disassembler für Schneider/Amstrad CPC :love: