none
Scroll Leisten von TextBox Elementen synchronisieren RRS feed

  • Frage

  • Hallo, in einer WFA möchte ich Text in 2 verschiedenen TextBox (en) (Multiline) anzeigen.

    Da der Text sehr lang ist und ein Vergleich zwischen den Text in Textbox1 und Textbox2 ermöglicht werden soll, benötige ich vertikale Scrollbars, die in beiden Textboxen synchron laufen sollen, oder aber eine Scrollbar, die gleichzeitig beide Textbox (en) scrollt.

    (1.)              Meine Erste Idee: Verwendung der Textbox Eigenschaft „Scrollbars -> Vertical“ (this .textBox1.ScrollBars = System.Windows.Forms.ScrollBars .Vertical;)

    Hat folgenden Nachteil: Ich kenne keine Möglichkeit auf den Wert dieser Scrollbar zuzugreifen und ihn der Scrollbar für Textbox2 zu übergeben.

     

    (2.)              Die zweite Idee das Scrollbar Element in der ToolBox zu nehmen (Zugriff auf Value ist so einfach möglich) bringt folgenses Problem mit:

    Wie weise ich den TextBox (en) den Scrollwert zu. Es gibt leider nur ein Beispiel wo das Vorgehen mit einem Panel und der Picturebox realisiert ist.

     

    Sieht hier jemand Möglichkeiten das Problem (elegant) zu lösen…

    Ich bin Anfänger in C# und deshalb noch längst nicht mit allen Details der Sprache vertraut

    Danke für eure Hilfe

    Mittwoch, 22. Juli 2009 08:26

Antworten

Alle Antworten

  • Hallo Peter,

    wenn Du zwei Textboxen synchronisieren willst, so ist die Scrollbar vermutlich der falsche Ansatz,
    denn deren Position ergibt sich indirekt aus der Position des Textes, der angezeigt wird und wie
    dieser durch Zeilenumbrüche formatiert wird.
    Je nachdem wie sehr sich die Inhalte unterscheiden, wird sich die Scrollbar Position nicht synchron sein.

    Vermutlich eher kommst Du zum Ziel wenn Du die Zeile anhand TextBoxBase. GetLineFromCharIndex
    bestimmst - und TextboxBase hat da einige weitere Hilfsmethoden.
    Und das Ergebnis an Select übergibst

    Am Rande:
    Willst Du es via Scrollbar machen, wirst Du auf das Windows API zurückgreifen müssen.
    Bei Codeproject gibt es ein Beispiel allerdings in VB.NET und für eine RichEditControl
    http://www.codeproject.com/KB/vb/VbNetScrolling.aspx

    Gruß Elmar

    Mittwoch, 22. Juli 2009 10:12
    Beantworter
  • Hallo Peter_01,




    In dem folgenden Beispiel findest Du alles was Du brauchst um das vertikale Scrolling zweier TreeViews zu synchronisieren.

    Artikel zeigt auch wie man einer TreeView ein Scroll-Ereignis anbindet.

    Es kann sehr Einfach für TextBoxen umgewandelt werden.

    http://www.codegod.de/WebAppCodeGod/treeview-scrolling-synchronisieren-AID241.aspx



    Grüße und Erfolg,

    Robert

    • Als Antwort markiert Peter_01 Donnerstag, 23. Juli 2009 08:13
    Mittwoch, 22. Juli 2009 10:30
    Moderator
  • Danke für die schnelle Hilfe,

    Das gezeige Beispiel ist sehr gut;
    Codegod ist nun bei meinen Favoriten - entscheidend ist oft wo man suchen muss...
    ich konnte es auch in mein Projekt einbauen und erreicht, dass die Textbox auf das event "Scroll" reagiert und die Methode "ScrollToPosition()" bekommt.
    Mir ist nur aufgefallen, dass der Code deutlich anders organisiert ist als bei einen ganz neuen Projekt. Ich werde noch ein bischen Übung brauchen um da voll durchzusteigen.


    Nochmals Danke

    Peter
    Donnerstag, 23. Juli 2009 08:19
  • Elmar danke für deine schnelle Antwort.

    Ich hab jetzt viel Input zum probieren.
    Außerdem ist der Code auf codeproject schön dokumentiert. Ich werde dort in Zukunft öfter nachschaun.

    Viele Grüße

    Peter
    Donnerstag, 23. Juli 2009 08:29