Click here to Skip to main content
15,886,873 members
Home / Discussions / Visual Basic
   

Visual Basic

 
QuestionEvent on Scrolling to the end in flowlayoutpanel Pin
Ammar_Ahmad28-Jun-12 7:14
Ammar_Ahmad28-Jun-12 7:14 
AnswerRe: Event on Scrolling to the end in flowlayoutpanel Pin
Nick Otten29-Jun-12 1:06
Nick Otten29-Jun-12 1:06 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Ammar_Ahmad29-Jun-12 1:44
Ammar_Ahmad29-Jun-12 1:44 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Nick Otten29-Jun-12 1:54
Nick Otten29-Jun-12 1:54 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Ammar_Ahmad29-Jun-12 2:03
Ammar_Ahmad29-Jun-12 2:03 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Nick Otten29-Jun-12 2:54
Nick Otten29-Jun-12 2:54 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Ammar_Ahmad29-Jun-12 8:27
Ammar_Ahmad29-Jun-12 8:27 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Nick Otten1-Jul-12 21:37
Nick Otten1-Jul-12 21:37 
hmm, oke im not really sure why you want to show that messagebox. but I thrown in some more trail and error and i came up with the code below. Note that I ran a little low on time so its a bit of a mess...i recommend throwing in a breakpoint to figure out exactly how the code works before putting it into your project. to test it again make a form (called form1) and add a listbox (txtscroll) in it. then copy paste the code into your form.

VB
Imports System.Runtime.InteropServices

Public Class Form1
    Dim WithEvents scrollhandler As MyListener 'class that will watch windows to see if your scrolling
    Private scrolled As Boolean = False 'boolean you can use to flip if a message box was displayed or not...(so it wont loop the messagebox.show)
    Private maxscroll As Int64 'int used to store the max value of the scrollbar
    'dll used to get the scrollbar value NOTE: if the scrollbar is not visible or you go higher then your max it will crash!
    <DllImport("user32.dll", CharSet:=CharSet.Auto)> _
    Public Shared Function GetScrollPos(ByVal hWnd As IntPtr, ByVal nBar As Integer) As Integer
    End Function

    'dll used to set the scrollbar value NOTE: if the scrollbar is not visible or you go higher then your max it will crash!
    <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


    Public Property HScrollPos() As Integer 'property to set or get the horisontal scrollbar value
        Get
            Return GetScrollPos(DirectCast(txtscroll.Handle, IntPtr), SB_HORZ) 'change txtscroll to the control you use. dont forget the .handle
        End Get
        Set(ByVal value As Integer)
            SetScrollPos(DirectCast(txtscroll.Handle, IntPtr), SB_HORZ, value, True) 'change txtscroll to the control you use. dont forget the .handle
        End Set
    End Property


    Public Property VScrollPos() As Integer 'Property to set or get the Vertical scrollbar value
        Get
            Return GetScrollPos(DirectCast(txtscroll.Handle, IntPtr), SB_VERT) 'change txtscroll to the control you use. dont forget the .handle
        End Get
        Set(ByVal value As Integer)
            SetScrollPos(DirectCast(txtscroll.Handle, IntPtr), SB_VERT, value, True) 'change txtscroll to the control you use. dont forget the .handle
        End Set
    End Property

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'some random loop i used to ditch some data in my listbox for testing
        Dim index As Int32 = 0
        Do While index < 1000
            txtscroll.Items.Add(index.ToString())
            index += 1
        Loop
        maxscroll = index - 18 'calculate max value. everytime you add a item you have to do this again. to calculate this its a bit of a trail and error thing depending on your control
        'attach your scrollwatcher to your control. in my case i have a listbox called "txtscroll")
        scrollhandler = New MyListener(txtscroll)

    End Sub

    Private Sub scrollhandler_MyScroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles scrollhandler.MyScroll
        If VScrollPos = maxscroll And scrolled Then 'the scrollbar is down and no message was given, showing a messagebox
            MessageBox.Show("you reached the max on the verticle scrollbar!", "yay")
            scrolled = False 'messagebox was shown, flip bool to prevent loop
        ElseIf VScrollPos < maxscroll Then
            scrolled = True 'the scroll value is smaller then the maximum scroll value. meaning the next time the bar hits the bottem a new textbox should be shown
        End If
    End Sub

    Private Sub txtscroll_MouseWheelScroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtscroll.MouseWheel
        scrollhandler_MyScroll(e, e) 'needed to catch the scrollwheel event.
    End Sub


    Private Class MyListener
        Inherits NativeWindow

        Public Event MyScroll(ByVal sender As Object, ByVal e As EventArgs)
        Const WM_MOUSEACTIVATE = &H21
        Const WM_MOUSEMOVE = &H200
        Private control As Control

        Public Sub New(ByVal control As Control)
            AssignHandle(control.Handle) 'docks handler to given control
        End Sub

        Protected Overrides Sub WndProc(ByRef Messageevent As Message)
            Const WM_HSCROLL = &H114
            Const WM_VSCROLL = &H115
            If Messageevent.Msg = WM_HSCROLL Or Messageevent.Msg = WM_VSCROLL Then 'looks if the horisontal or verticle scrollbar is moving
                'one of the scrollbars is moving, throw event
                RaiseEvent MyScroll(control, New EventArgs)
            End If
            MyBase.WndProc(Messageevent)
        End Sub

        Protected Overrides Sub Finalize()
            'not used in example but drops the scroll watcher
            ReleaseHandle()
            MyBase.Finalize()
        End Sub

    End Class

End Class


EDIT: oh before i forget it: the maximum of your scroll bar is calculated by the total amount of items - the amount of items that can be displayed without a scroll bar

modified 2-Jul-12 4:52am.

GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Ammar_Ahmad2-Jul-12 13:29
Ammar_Ahmad2-Jul-12 13:29 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Nick Otten2-Jul-12 20:36
Nick Otten2-Jul-12 20:36 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Ammar_Ahmad2-Jul-12 23:57
Ammar_Ahmad2-Jul-12 23:57 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Nick Otten3-Jul-12 0:16
Nick Otten3-Jul-12 0:16 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Ammar_Ahmad3-Jul-12 13:36
Ammar_Ahmad3-Jul-12 13:36 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Nick Otten4-Jul-12 1:01
Nick Otten4-Jul-12 1:01 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Ammar_Ahmad6-Jul-12 13:24
Ammar_Ahmad6-Jul-12 13:24 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Nick Otten8-Jul-12 20:38
Nick Otten8-Jul-12 20:38 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Ammar_Ahmad10-Jul-12 2:32
Ammar_Ahmad10-Jul-12 2:32 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Nick Otten10-Jul-12 3:13
Nick Otten10-Jul-12 3:13 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Ammar_Ahmad10-Jul-12 15:15
Ammar_Ahmad10-Jul-12 15:15 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Nick Otten10-Jul-12 20:41
Nick Otten10-Jul-12 20:41 
AnswerRe: Event on Scrolling to the end in flowlayoutpanel Pin
Luc Pattyn29-Jun-12 2:56
sitebuilderLuc Pattyn29-Jun-12 2:56 
JokeRe: Event on Scrolling to the end in flowlayoutpanel Pin
Nick Otten29-Jun-12 3:01
Nick Otten29-Jun-12 3:01 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Luc Pattyn29-Jun-12 4:19
sitebuilderLuc Pattyn29-Jun-12 4:19 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Nick Otten29-Jun-12 4:31
Nick Otten29-Jun-12 4:31 
GeneralRe: Event on Scrolling to the end in flowlayoutpanel Pin
Ammar_Ahmad29-Jun-12 8:28
Ammar_Ahmad29-Jun-12 8:28 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.