Auto Scroll in der Richtextbox ?

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Louis.Cyfer.

    Auto Scroll in der Richtextbox ?

    Guten Abend,

    ich habe eine Frage zu der Rich Text Box (VB 2008).
    Was ich gerne erreichen möchte das bei dem Klick von "Button1" automatisch in die letzte Zeile angezeigt wird. Z.B. für ein Chat Programm, es soll immer automatisch nach unten Scrollen.
    Also wie kann man das hinbekommen das der immer in die letzte "Zeile" springt?

    Schonmal danke im voraus ;)


    edit:
    Hab grad wie ein blöder Probiert und siehe da! Es Funktioniert! Denn wenn er runtergescrollt ist soll er ja unten verbleiben bis etwas neues passiert!



    VB.NET-Quellcode

    1. RichTextBox1.Select(RichTextBox1.Text.Length, 0)
    2. RichTextBox1.ScrollToCaret()


    edit2:
    mhm ein Problem, wenn ich das mit dem Autoscroll in nem Timer einbaue und das ganze sekündlich aktualisiert wird, zappt das ganze dann immer um eine Zeile hoch und runter. Dadurch wird der Text unlesbar. GIbt es noch eine andere möglichkeit?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mieper“ ()

    Hay ,
    dasselbe Problem hatte ich auch.

    Du musst den Text immer mit :

    VB.NET-Quellcode

    1. RichTextBox1.Appendtext(String)
    bzw.

    VB.NET-Quellcode

    1. RichTextBox1.Appendtext("Text")
    hinzufügen , dann scrollt die TextBox automatisch mit.

    Beim ChatProgramm einfach ins TextChanged Event das eintragen mit der Neuen Nachricht.

    Mfg Kevin.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Gutelaunetyp“ ()

    Setzte das mal in das TextChanged Event rein:

    VB.NET-Quellcode

    1. RichTextBox1.SelectionLength = 0
    2. RichTextBox1.SelectionStart = Len(RichTextBox1.Text)
    3. RichTextBox1.ScrollToCaret()
    @MB-Tech: Len ist veraltet aus VB6 (RichTextBox1.Text.Length wird jetzt verwendet...)
    außerdem hat er das Problem schon behoben, bevor die erste Antwort geschrieben worden ist...nur dass er es in einen Timer gesteckt hattte, statt in das TextChanged Event...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    yeah! danke, klappt ^^

    noch eine kleine frage neben bei

    ich habe als eingabe feld eine andere textbox. Wenn man Enter drückt wird das ganze dann in die rtf box gesendet.
    Allerdings wenn ich dann enter drücke wird das ganze zwar gesendet. Und die Textbox1 geleert. Dennoch macht er ein "Enter" darein. Habg das mit

    VB.NET-Quellcode

    1. textbox1.clear

    gelöst.
    sieht aber ein Bissel blöd aus.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub TextBox1_keyDown(ByVal sender As Object, ByVal e As KeyEventArgs) Handles TextBox1.KeyDown
    2. If e.KeyCode = Keys.Enter Then
    3. If TextBox1.Text = "" Then
    4. Else
    5. RichTextBox1.AppendText(vbCrLf & TextBox1.Text)
    6. End If
    7. TextBox1.Clear()
    8. End If
    9. End Sub
    10. Private Sub TextBox1_keyup(ByVal sender As Object, ByVal e As KeyEventArgs) Handles TextBox1.KeyUp
    11. If e.KeyCode = Keys.Enter Then
    12. TextBox1.Clear()
    13. End If
    14. End Sub
    15. Private Sub RichTextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RichTextBox1.TextChanged
    16. RichTextBox1.SelectionLength = 0
    17. RichTextBox1.SelectionStart = Len(RichTextBox1.Text)
    18. RichTextBox1.ScrollToCaret()
    19. End Sub


    @jvbsl ja stimmt is mir vorhin auch aufgefallen. Menshcne machen Fehler, sollte aber nicht vorkommen :whistling:



    edit:

    nochmal eine kleine Frage ;)
    wie macht mand as mit so einer Userlist? Z.B. das in einer extrenen TXT alle User aufgelistet sind? Und das dann Im tree dingens angezeigt wird?

    Beispiel die TXT:
    Spoiler anzeigen
    user1
    user2
    user3
    mieper
    user4


    und wie kann man das dann umsetzten das die User dann in der Tree view oder Listbox angezeigt werden?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mieper“ ()

    die e.Handled Eigenschaft ist dazu da ein KeyDown ungültig zu machen...

    Für die User list sollte es ca. so aussehen:

    VB.NET-Quellcode

    1. ListBox1.Items.AddRange(Split(System.IO.File.ReadAllText("Datei.txt",Environment.NewLine))
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    das klappt leider nicht da ich eine Listview Box habe. Aber ich kann ja mal schauen was eventuell besser ist.

    edit:

    Mit der list box funktionier der Code nicht.
    Den letzten Teil vom Code: ,Environment.NewLine) ist Blau unterstrichen und gibt diese Fehlermedlung zurrück:
    Der Wert vom Typ "String" kann nicht in "System.Text.Encoding" konvertiert werden.
    Hay ,
    mach mal + Environment.Newline anstatt , Environment.Newline

    Aber bei FileReadalltext wofür eine Neue Zeile?
    Das ist Fail bei Readalltext.

    Mfg Kevin.

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

    Ahhh! Schonmal keine Fehler Medlung mehr. Danke dir ;)

    edit:

    lol, jetzt beim Debugging soll ein Illegales Zeichen im Pfad sein.

    VB.NET-Quellcode

    1. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. ListBox1.Items.AddRange(Split(System.IO.File.ReadAllText("\\phils-pc\public\chat\netchat2\server.txt" + Environment.NewLine)))
    3. End Sub
    Hay,
    Sry aber Wieso willst du beim Datei auslesen eine Neue Zeile ? + Environment.Newline ist totail Fail.
    2. Kann man kein \ im Ordnernamen haben.


    Edit:

    VB.NET-Quellcode

    1. ListBox1.items.clear()
    2. Dim Zeilen As String() = System.IO.File.ReadAllLines("\phils-pc\public\chat\netchat2\server.txt", System.Text.Encoding.Default)
    3. ListBox1.Items.Addrange(Zeilen)


    Mfg Kevin.

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von „Gutelaunetyp“ ()

    die datei befindet sich auf meinem Computer, allerdings in einem Öffentlichen Ordner. Durch das "\\" wird der Computer im Netzwerk angesteuert. Ja das Funktioniert ;) ich habe das schon bei einigen Programmen die man im Netzwerk Nutzen kann. Warum es hier nicht klappt verstehe ich nicht.


    edit:

    ouch... ich sehe grade ich hab überall "\" gemacht. :S

    edit2: Ne war doch richtig. oO

    edit3:
    Naja er Importiert zwar alles in die Listbox, ABER alles in eine Zeile. Er soll doch jede Zeile in der TXT auch als allein stehende Zeile in der Listbox haben.

    edit4:
    Hey danke hat geklappt. Wie setze ich das dann um das Z.B. die Ausgewählte zeile auf Knopfdruck in eine Textbox geschrieben wird? Beim Listview funktioniert das so:

    VB.NET-Quellcode

    1. textbox1.Text = Listview1.SelectedItems.Item(0).Text


    nur wie bei der listbox?

    edit5:

    das war einfach oO

    VB.NET-Quellcode

    1. textbox1.text = listbox1.text

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „mieper“ ()

    Dann darf man nicht mit System.IO.File.ReadAllLines arbeiten.Anstattdessen mit einer Schleife jede einzelne Zeile im Textdokument durchgehen und als Item auflisten.
    Nimm dazu am besten einen Streamreader.
    gibt es einen Code der Überprüft ob man schon beim Scrollen am unteren Rand angekommen ist?

    Also wenn er nicht ganz unten ist scrollt er nach unten, ist er bereits unten unterbindet er das scrollen.

    Mein gedanken gang mit einem befehl den es nicht gibt:

    VB.NET-Quellcode

    1. if richtextbox1."scrollbar-unten" then
    2. else
    3. RichTextBox1.SelectionLength = 0
    4. RichTextBox1.SelectionStart = Len(RichTextBox1.Text)
    5. RichTextBox1.ScrollToCaret()
    Ja für was denn?

    Wenn er ganz unten ist und der Befehl zum Runterscrollen ausgeführt wird, dann bleibt er an der gleichen Stelle...
    ne eben nicht, wenn er bereits unten ist aber immer noch weiter versucht runter zu scrollen hüpft er eine zeile nach oben und scrollt dann wieder runter.

    Das problem hab ich da er alle halbe sekunde den Text für den Chat erneut in die richtextbox lädt. Da sich ja der text dann "changed" startet das event "richtextbox1.textchanged" und scrollt wie ein bekloppter.
    Wenn er erkennen würde das er schon unten ist und nich her scrollen brauch wär das meine lösung :)

    aber wie setzt man das um?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „mieper“ ()

    Ja, gute Idee, ich denke das kannst du dann selbst bewerkstelligen oder?
    Falls noch was ist, einfahc schreiben.