Reverse Auswählen von Text in einem programmatisch richtextbox (vb.net)
Frage
Ich habe ein Formular mit einer RichTextBox und einer Bildlaufleiste. Ich möchte halten können Text in das Textfeld anhängen, ohne meine Auswahl zu verlieren. Ich kann die Selection und SelectionLength speichern, bevor ich den Text anhängen und legen Sie es zurück und es funktioniert. Das Problem ist, wenn es die Auswahl rückgängig zu machen kommt. Das Beste, was ich tun könnte, um die Selection an der richtigen Position zurückversetzt, aber ich muss die Maus bewegen, so dass es Text wählt wieder. Ich verwende die folgenden Funktionen vor und nach dem ich fügen Sie den Text ein:
Private Sub StopRepaint()
Dim pt As Point
' Stop redrawing:
SendMessage(txtchat.Handle, WM_SETREDRAW, 0, pt)
' Stop sending of events:
eventmask = SendMessage(txtchat.Handle, EM_GETEVENTMASK, 0, pt)
End Sub
Private Sub StartRepaint()
Dim pt As Point
' turn on events
SendMessage(txtchat.Handle, EM_SETEVENTMASK, 0, pt)
' turn on redrawing
SendMessage(txtchat.Handle, WM_SETREDRAW, 1, pt)
' this forces a repaint, which for sotxtchat reason is necessary in sotxtchat cases.
txtchat.Invalidate()
End Sub
Wenn meine Scrollbar Position nicht vollständig unten ist, ich bin es Einstellung nach dem Text mit diesem zurück angefügt:
If Not isbottom(getpos) Then
PostMessageA(txtchat.Handle, WM_VSCROLL, SB_THUMBPOSITION + _
&H10000 * getpos(), Nothing)
End If
Mein Hauptziel ist es, Text zu markieren und kopieren, auch wenn neuer Text der richtextbox angefügt wird. Jeder weiß, wie richtig Text in umgekehrter Richtung wählen oder einfach mein Problem beheben Text abgewählt werden? Danke.
Lösung
Ich würde versuchen, „wählbare Blöcke“ halten jede hängten Platte von Text unabhängig von dem nächsten Block zu machen. So ähnlich wie MSN Messenger. Sie können die „Platten“ erscheinen nahtlos machen und einen Stringbuilder verwenden, können den letzten Block sicher als einzelner Strom exportieren.