Erhalten vertikale Bildlaufleiste Position als ganze Zahl in vb.net
-
06-07-2019 - |
Frage
Ich habe eine RichTextBox und ich brauche die Position der vertikalen Bildlaufleiste zu finden.
Gibt es eine Möglichkeit, dies ohne Pinvoke zu tun? Wenn nicht, was ist eine Möglichkeit, dies mit Pinvoke zu tun?
Ich brauche einen Integer-Wert zurück.
Danke für die Hilfe!
Lösung
Ich kenne keine Möglichkeit, dies zu tun, ohne PInvoke. Sie können PInvoke verwenden, um rufen GetScrollPos .
Hier ist, wie Sie können es versuchen.
Schritt 1:. Erstellen Sie eine benutzerdefinierte RichTextBox Steuerung durch einen Standard-RichTextBox erstreckt
Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Namespace WindowsFormsApplication1
Public Class MyRichTextBox
Inherits RichTextBox
<DllImport("user32.dll", CharSet:=CharSet.Auto)> _
Public Shared Function GetScrollPos(ByVal hWnd As IntPtr, ByVal nBar As Integer) As Integer
End Function
<DllImport("user32.dll")> _
Private Shared Function SetScrollPos(ByVal hWnd As IntPtr, ByVal nBar As Integer, ByVal nPos As Integer, ByVal bRedraw As Boolean) As Integer
End Function
Private Const SB_HORZ As Integer = &H0
Private Const SB_VERT As Integer = &H1
''' <summary>
''' Gets and Sets the Horizontal Scroll position of the control.
''' </summary>
Public Property HScrollPos() As Integer
Get
Return GetScrollPos(DirectCast(Me.Handle, IntPtr), SB_HORZ)
End Get
Set(ByVal value As Integer)
SetScrollPos(DirectCast(Me.Handle, IntPtr), SB_HORZ, value, True)
End Set
End Property
''' <summary>
''' Gets and Sets the Vertical Scroll position of the control.
''' </summary>
Public Property VScrollPos() As Integer
Get
Return GetScrollPos(DirectCast(Me.Handle, IntPtr), SB_VERT)
End Get
Set(ByVal value As Integer)
SetScrollPos(DirectCast(Me.Handle, IntPtr), SB_VERT, value, True)
End Set
End Property
End Class
End Namespace
Dies wird zwei Eigenschaften einer Standard-RichTextBox hinzu: HScrollPos und VScrollPos. Diese Eigenschaften können Sie gehen bekommen und stellen Sie die horizontale und vertikale Bildlaufposition in Ihrer Kontrolle.
Schritt 2:. ein Test Formular erstellen und Ihre Steuerung ausprobieren
Erstellen Sie eine Winform im selben Projekt wie das benutzerdefinierte Steuerelement. Lassen Sie die individuelle Steuerung in der Testform und fügen Sie auf dem Formular eine Schaltfläche. In dem Click-Ereignis des Formulars den folgenden Code Ihrer benutzerdefinierten Steuerelements vertikale Bildlaufposition zu sehen.
Console.WriteLine(myRichTextBox1.VScrollPos)
Ein paar Dinge zu beachten gilt:
-
Wenn Sie Ihre Steuerung ist nicht eine vertikale Bildlaufleiste angezeigt wird, die rufen HScrollPos stürzt Ihr Programm. Es gibt ein paar offensichtlich um diese Möglichkeiten (prüfen, ob die Scrollbar angezeigt wird, bevor Überprüfung der Eigenschaft, oder machen die vertikale Bildlaufleiste immer sichtbar, usw.).
-
Je nachdem, wie die Kontrolle (und möglicherweise Form) ist so bemessen (nicht erwähnen Änderungen in den Textinhalt der Kontrolle), das Setzen der VScrollPos kann Ihr Programm zum Absturz bringen oder wiederherstellen es nicht in die Position es in war, als der VScrollPos Wert war gespeichert.
-
Ich habe noch nie diesen Code verwendet. ich dachte Ihre Frage war, interessant und hat ein wenig Forschung zu kommen mit meiner Antwort.