Obtenga la posición de la barra de desplazamiento vertical como entero en vb.net
-
06-07-2019 - |
Pregunta
Tengo un RichTextBox y necesito encontrar la posición de la barra de desplazamiento vertical.
¿Hay alguna manera de hacer esto sin Pinvoke? Si no es así, ¿de qué manera se puede hacer esto CON Pinvoke?
Necesito devolver un valor entero.
¡Gracias por la ayuda!
Solución
No conozco ninguna forma de hacer esto sin PInvoke. Puede usar PInvoke para llamar a GetScrollPos .
Así es como puedes intentarlo.
Paso 1: crea un control RichTextBox personalizado extendiendo una RichTextBox estándar.
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
Esto agregará dos propiedades a un RichTextBox estándar: HScrollPos y VScrollPos. Estas propiedades le permitirán obtener y establecer la posición de la barra de desplazamiento horizontal y vertical en su control.
Paso 2: crea un formulario de prueba y prueba tu control.
Crea un Winform en el mismo proyecto que tu control personalizado. Suelte el control personalizado en el formulario de prueba y agregue un botón en el formulario. En el evento Click del formulario, agregue el siguiente código para ver la posición de desplazamiento vertical de su control personalizado.
Console.WriteLine(myRichTextBox1.VScrollPos)
Algunas cosas a tener en cuenta:
-
Si su control no está actualmente mostrando una barra de desplazamiento vertical, la llamar a HScrollPos bloqueará su programa. Hay unos pocos obviamente maneras de evitar esto (compruebe que el la barra de desplazamiento se muestra antes revisar la propiedad, o hacer la barra de desplazamiento vertical siempre visible, etc.).
-
Dependiendo de cómo el control (y posiblemente forma) es de tamaño (no para Mencionar cambios en el contenido del texto. del control), configurando el VScrollPos puede bloquear su programa o No lo devuelves a la posición que estaba en cuando el valor VScrollPos era guardado.
-
Nunca he usado este código. yo pensé que tu pregunta era interesante e hizo un poco de investigación para llegar a mi respuesta.