Я не знаю, как это сделать без PInvoke. Вы можете использовать PInvoke для вызова GetScrollPos .
Вот как вы можете это попробовать.
Шаг 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 было
сохранены.
Я никогда не использовал этот код. я
думал, что ваш вопрос
интересно и сделал немного
исследование, чтобы придумать мой ответ.