Получить положение вертикальной полосы прокрутки как целое число в vb.net
-
06-07-2019 - |
Вопрос
У меня есть RichTextBox, и мне нужно найти положение вертикальной полосы прокрутки.
Есть ли какой-нибудь способ сделать это без Pinvoke?Если нет, то как можно сделать это С ПОМОЩЬЮ Pinvoke?
Мне нужно вернуть целочисленное значение.
Спасибо за помощь!
Решение
Я не знаю никакого способа сделать это без PInvoke.Вы можете использовать PInvoke для вызова GetScrollPos Получает scrollPos.
Вот как вы можете это попробовать.
Шаг 1: Создайте пользовательский элемент управления RichTextBox, расширив стандартный RichTextBox.
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
Это добавит два свойства к стандартному RichTextBox:HScrollPos и VScrollPos.Эти свойства позволят вам перейти и установить положение горизонтальной и вертикальной полосы прокрутки в вашем элементе управления.
Шаг 2: Создайте тестовую форму и опробуйте свой элемент управления.
Создайте Winform в том же проекте, что и ваш пользовательский элемент управления.Поместите пользовательский элемент управления в тестовую форму и добавьте кнопку в форму.В событии Click формы добавьте следующий код для просмотра положения прокрутки по вертикали вашего пользовательского элемента управления.
Console.WriteLine(myRichTextBox1.VScrollPos)
Несколько вещей, на которые стоит обратить внимание:
Если ваш элемент управления не сейчас отображение вертикальной полосы прокрутки, на позвонить на HScrollPos приведет к сбою программы.Очевидно, что есть несколько способов обойти это (убедитесь, что полоса прокрутки отображается перед проверкой свойства, или сделайте вертикальную полосу прокрутки всегда видимой и т.д.).
В зависимости от способа управления (и возможно, форма) - это размер (не отметить изменения в текст содержание элемента управления), установка VScrollPos может привести к аварийному завершению работы вашей программы или не восстановить ее в положение, в котором она находилась при сохранении значения VScrollPos.
Я никогда не использовал этот код.Я подумал, что ваш вопрос был интересным, и провел небольшое исследование, чтобы прийти к своему ответу.