views:

1465

answers:

3

Hi, my question is as is:How to detect if a scrollbar is at or not at the end of a richtextbox?

edit: when I say at the end I mean completely scrolled to the bottom, not anywhere else.

+1  A: 

Check out the GetScrollRange and GetScrollPos API...

Private Const SBS_HORZ = 0
Private Const SBS_VERT = 1

<DllImport("user32.dll")> _
Public Function GetScrollRange(ByVal hWnd As IntPtr, ByVal nBar As Integer, _
                               ByRef lpMinPos As Integer, _
                               ByRef lpMaxPos As Integer) As Boolean
End Function

<DllImport("user32.dll")> _
Public Function GetScrollPos(ByVal hWnd As Integer, _
                             ByVal nBar As Integer) As Integer
End Function

// ...

Dim scrollMin as Integer = 0
Dim scrollMax as Integer = 0

If(GetScrollRange(rtb.Handle, SBS_VERT, scrollMin, scrollMax) Then
   Dim pos as Integer = GetScrollPos(rtb.Handle, SBS_VERT)

   // Detect if they're at the bottom
EndIf

Notes:

To determine if the scrollbar is visible, call GetWindowLong and check for WS_VSCROLL

To determine the max value the slider can get to, call GetScrollInfo; I think the maximum value is

scrollMax - largeChange + 1
Daniel LeCheminant
ok works great, but two more things: how can I know if the scrollbar is visible, and how can I get the last possible position of the scrollbar?
Ownatik
I am able to make a call to getScrollInfo but I just don't know how to build the function which will return the last position. could you help me with that?
Ownatik
nevermind got it in a pretty weird manner.
Ownatik
A: 

One method is to use the GetScrollPos function. Here's kind of a long winded example of it using VB.NET.

http://www.codeproject.com/KB/vb/VbNetScrolling.aspx?print=true

BobbyShaftoe
A: 

Great, exactly what I needed for a C# program. Thanks a bunch...