none
MultiLine Textbox - aktuelle Position der Scrollbars ermitteln

    Frage

  • Hallo,

    ich habe eine MultiLine-Textbox, welche 2 Events für das horizontale und vertikale Scrollen enthält.

    public class HTextBox : System.Windows.Forms.TextBox {
            private const int WM_VSCROLL = 277;
            private const int WM_HSCROLL = 276;
            public event System.EventHandler OnVerticalScroll;
            public event System.EventHandler OnHorizontalScroll;
            public HTextBox() {
                this.WordWrap = false;
                this.Multiline = true;
                this.ScrollBars = System.Windows.Forms.ScrollBars.Both;
            }
            protected override void OnPaint(System.Windows.Forms.PaintEventArgs e) {
                base.OnPaint(e);
            }
            protected override void WndProc(ref System.Windows.Forms.Message m) {
                if (m.Msg == WM_VSCROLL && OnVerticalScroll != null)
                    OnVerticalScroll(this, new System.EventArgs());
                if (m.Msg == WM_HSCROLL && OnHorizontalScroll != null)
                    OnHorizontalScroll(this, new System.EventArgs());
                base.WndProc(ref m);
            }
        }

    Jetzt möchte ich, wenn die horizontale Scrollbar verschoben wird, deren Position (Location.Y) über den Event im Hauptform bekommen. Die Message liefert keine aussagekräftigen Werte ausser HWnd und LParam, bei denen ich aber keinen Plan habe, wie ich sie zur Positionsberechnung heranziehen könnte...

    Hintergrund ist, das der Benutzer an eine Position in der Textbox klicken kann und darauf hin der enthaltene Text erst einmal grafisch durch eine senkrechte Linie getrennt wird. Diese Trennung soll natürlich auch beim horizontalen Scrollen erhalten bleiben und gezeichnet werden.

    Wie kann ich das lösen? Für Eure Tipps dankend,

    Klaus


    No Brain - No Pain

    Sonntag, 17. Februar 2013 07:52

Antworten

  • Ok,

    Lösung selbst gefunden:

    Mittels

    [DllImport("user32.dll")]
    static extern int GetScrollPos(IntPtr hWnd, int nBar);

    komme ich an die Positionsdaten und kann sie entsprechend umrechnen.

    Grüße,

    Klaus


    No Brain - No Pain

    • Als Antwort markiert Klaus Mayer Dienstag, 19. Februar 2013 13:22
    Dienstag, 19. Februar 2013 13:21