Récupère la position de la barre de défilement verticale en entier dans vb.net
-
06-07-2019 - |
Question
J'ai une RichTextBox et je dois trouver la position de la barre de défilement verticale.
Y at-il un moyen de faire cela sans Pinvoke? Sinon, comment faire avec Pinvoke?
Je dois renvoyer une valeur entière.
Merci pour l'aide!
La solution
Je ne sais pas comment faire cela sans PInvoke. Vous pouvez utiliser PInvoke pour appeler GetScrollPos .
Voici comment vous pouvez l'essayer.
Étape 1: créez un contrôle RichTextBox personnalisé en étendant un RichTextBox standard.
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
Ceci ajoutera deux propriétés à un RichTextBox standard: HScrollPos et VScrollPos. Ces propriétés vous permettront d’obtenir et de définir la position des barres de défilement horizontale et verticale dans votre contrôle.
Étape 2: créez un formulaire de test et testez votre contrôle.
Créez un Winform dans le même projet que votre contrôle personnalisé. Supprimez le contrôle personnalisé du formulaire de test et ajoutez un bouton sur le formulaire. Dans l'événement Click du formulaire, ajoutez le code suivant pour afficher la position de défilement vertical de votre contrôle personnalisé.
Console.WriteLine(myRichTextBox1.VScrollPos)
Quelques points à surveiller:
-
Si votre contrôle n'est pas actuellement affichant une barre de défilement verticale, le appel à HScrollPos plantera votre programme. Il y en a évidemment façons de contourner le problème (vérifiez que le la barre de défilement est affichée avant vérifier la propriété, ou faire la barre de défilement verticale toujours visible, etc.).
-
En fonction de la manière dont le contrôle (et éventuellement forme) est dimensionné (ne pas mentionner les changements dans le contenu du texte du contrôle), en réglant la VScrollPos peut planter votre programme ou pas le restaurer à la position qu'il était dans lorsque la valeur de VScrollPos était enregistré.
-
Je n'ai jamais utilisé ce code. je pensais que votre question était intéressant et a fait un peu de recherche pour trouver ma réponse.