Hi Ihr Spezialisten,
ich verdreifle, äh verzweifle so langsam mit meiner Richtextbox.
Ich lade ein Dokument, was mehr Zeilen hat, als die RTF-Box, in welcher dieses angezeigt werden soll:
Und dabei wird der Inhalt aber immer bis zur letzten Dokument-Zeile gescrollt.
Ich dachte zuerst, dass es an anderem Code in meinem Proggi liegt und habe einen einfachen Test-Button auf die Form gepackt:
Das mir nicht verständliche:
Weder das
Das Dokument bleibt auf der letzten Zeile in der RTF-Box angezeigt.
Was ich bislang herausbekommen habe:
Das Dokument wird beim gesetzten Haltepunkt nach dem Laden und Anzeigen korrekt auf erste Zeile oben angezeigt.
Aber mit jedem folgenden Durchlauf der
und
scrollt die Anzeige eine Zeile nach unten, bis das Dokument-Ende erreicht ist.
Beim Durchhüpfen im Halt-Mode mit F10 bzw. F11 werden keine weitere Subs oder Funktionen dazwischen aufgerufen.
Nur die beide genannten.
EDIT: Kann es sein, dass bei der Einzelschritt-Abarbeitung vielleicht subs- oder Funktionen ausgeführt werden, welche in der Einzelschritt-Abarbeitung nicht angezeigt werden?
Habe sogar testhalber die Inhalte der
Diese laufen also leer durch.
Dennoch besteht das Problem.
Kann mir da vielleicht einer von Euch helfen, diesen Wurm aus der Nase zu ziehen?
Ich bin total ratlos...
Beste Grüsse
EDIT: Ganz vergessen - das unerwünschte Scrollen erfolgt nur, wenn das zuvor geladene Dokument gescrollt war.
Setzte ich das Caret im zuvor geladene Dokument auf 0,0, wird das mit dem Button geladene Dokument auch in der obersten Zeile angezeigt.
Also scheint mir, dass irgendwas an der RTF-Box die Scrollpos vom alten Dokument in das neu geladene übernimmt - und das erst, wenn das System im Leerlauf ist und alle Threads abgearbeitet sind.
Also leider damit auch erst, nachdem ich die SelPos und SelLength sowie das ScrollToCaret gesetzt habe.
Nur... wie kann ich das verhindern?
EDIT2:
Funzt jetzt.
Ich muss tatsächlich vor dem Laden des Dokuments mit
oder eben mit :
die Scrollposition des letzten Dokuments löschen.
Warum auch immer - die RTF merkt sich die Scrollpos eines Dokuments und versucht, diese nach dem Laden eines ganz anderen Dokuments wiederherzustellen.
Bei
müsste m.E. auch die gespeicherte ScrollPos gekillt werden - wird sie aber nicht.
Man muss nicht alles verstehen...
EDIT3:
Funktioniert leider auch nicht.
Nicht mal das manuelle Setzen der ScrollPosition vor dem Laden des Dokuments hilft:
Was kann ich denn dann machen, um dieses blöde Scrollen zu verhindern?
Dieser Scrolleffekt tritt nur auf, wenn ich mit dem Mausrad ein Dok runterscrolle und dann ein anderes Doc lade.
Schiebe ich in einem Dok die VScroll-Bar runter, wird das nächste Dok mit der ersten Zeile geöffnet.
Oh Mann - ich glaube, das liegt an meinem Logitech-Maustreiber der MX-Master 35...
Wenn ich schön langsam runterscrolle bis zur letzten Zeile, wird das nächste Dok mit Zeile 1 angezeigt.
Scrolle ich aber mit dem Freilaufrad - also einfach anschubsen und radeln lassen - dann scrollt auch das nächste Dok runter, obwohl das Mausrad längst still steht.
Da wird sich der Treiber alle aufgrund Dokument-Ende nicht verarbeiteten Scroll-Befehle aufheben und diese bei nächste Gelegenheit an ein Control, das die VScroll-Befehle verarbeiten kann senden.
Und ich suche seit drei Tagen den Fehler in meinem Proggi
ich verdreifle, äh verzweifle so langsam mit meiner Richtextbox.
Ich lade ein Dokument, was mehr Zeilen hat, als die RTF-Box, in welcher dieses angezeigt werden soll:
Und dabei wird der Inhalt aber immer bis zur letzten Dokument-Zeile gescrollt.
Ich dachte zuerst, dass es an anderem Code in meinem Proggi liegt und habe einen einfachen Test-Button auf die Form gepackt:
VB.NET-Quellcode
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- Dim encodingSplit = mainformTextEncodingRTF.Split(CChar(","))
- Dim lParam As New StringBuilder(CStr(0))
- tsc_TextEditor_RTFBox.Rtf = System.IO.File.ReadAllText("X:\Eigene Dateien\VB.net\ICE-Ordner\ICE-Archiv Hilfe DE\04. Child-Fenster\01. 'ICE-Einstellungen'-Fenster\Tab 05 'Import'.rtf", System.Text.Encoding.GetEncoding(encodingSplit(0)))
- tsc_TextEditor_RTFBox.SelectionStart = 0
- tsc_TextEditor_RTFBox.SelectionLength = 0
- tsc_TextEditor_RTFBox.ScrollToCaret()
- 'SendMessage(tsc_TextEditor_RTFBox.Handle, EM_LINESCROLL, 0, lParam)
- 'SendMessage(tsc_TextEditor_RTFBox.Handle, WM_VSCROLL, SB_TOP, lparam)
- End Sub
Das mir nicht verständliche:
Weder das
SelectionStart
und SelectionLength
mit folgendem ScrollToCaret
, noch die beiden SendMessages
funktionieren.Das Dokument bleibt auf der letzten Zeile in der RTF-Box angezeigt.
Was ich bislang herausbekommen habe:
Das Dokument wird beim gesetzten Haltepunkt nach dem Laden und Anzeigen korrekt auf erste Zeile oben angezeigt.
Aber mit jedem folgenden Durchlauf der
und
scrollt die Anzeige eine Zeile nach unten, bis das Dokument-Ende erreicht ist.
Beim Durchhüpfen im Halt-Mode mit F10 bzw. F11 werden keine weitere Subs oder Funktionen dazwischen aufgerufen.
Nur die beide genannten.
EDIT: Kann es sein, dass bei der Einzelschritt-Abarbeitung vielleicht subs- oder Funktionen ausgeführt werden, welche in der Einzelschritt-Abarbeitung nicht angezeigt werden?
Habe sogar testhalber die Inhalte der
Timer_Tick
und Timer_Idle_Tick
auskommentiert.Diese laufen also leer durch.
Dennoch besteht das Problem.
Kann mir da vielleicht einer von Euch helfen, diesen Wurm aus der Nase zu ziehen?
Ich bin total ratlos...
Beste Grüsse
EDIT: Ganz vergessen - das unerwünschte Scrollen erfolgt nur, wenn das zuvor geladene Dokument gescrollt war.
Setzte ich das Caret im zuvor geladene Dokument auf 0,0, wird das mit dem Button geladene Dokument auch in der obersten Zeile angezeigt.
Also scheint mir, dass irgendwas an der RTF-Box die Scrollpos vom alten Dokument in das neu geladene übernimmt - und das erst, wenn das System im Leerlauf ist und alle Threads abgearbeitet sind.
Also leider damit auch erst, nachdem ich die SelPos und SelLength sowie das ScrollToCaret gesetzt habe.
Nur... wie kann ich das verhindern?
EDIT2:
Funzt jetzt.
Ich muss tatsächlich vor dem Laden des Dokuments mit
oder eben mit :
die Scrollposition des letzten Dokuments löschen.
Warum auch immer - die RTF merkt sich die Scrollpos eines Dokuments und versucht, diese nach dem Laden eines ganz anderen Dokuments wiederherzustellen.
Bei
müsste m.E. auch die gespeicherte ScrollPos gekillt werden - wird sie aber nicht.
Man muss nicht alles verstehen...
EDIT3:
Funktioniert leider auch nicht.
Nicht mal das manuelle Setzen der ScrollPosition vor dem Laden des Dokuments hilft:
Was kann ich denn dann machen, um dieses blöde Scrollen zu verhindern?
Dieser Scrolleffekt tritt nur auf, wenn ich mit dem Mausrad ein Dok runterscrolle und dann ein anderes Doc lade.
Schiebe ich in einem Dok die VScroll-Bar runter, wird das nächste Dok mit der ersten Zeile geöffnet.
Oh Mann - ich glaube, das liegt an meinem Logitech-Maustreiber der MX-Master 35...
Wenn ich schön langsam runterscrolle bis zur letzten Zeile, wird das nächste Dok mit Zeile 1 angezeigt.
Scrolle ich aber mit dem Freilaufrad - also einfach anschubsen und radeln lassen - dann scrollt auch das nächste Dok runter, obwohl das Mausrad längst still steht.
Da wird sich der Treiber alle aufgrund Dokument-Ende nicht verarbeiteten Scroll-Befehle aufheben und diese bei nächste Gelegenheit an ein Control, das die VScroll-Befehle verarbeiten kann senden.
Und ich suche seit drei Tagen den Fehler in meinem Proggi
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Dideldum“ ()