Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. Visual Basic
  4. Event on Scrolling to the end in flowlayoutpanel

Event on Scrolling to the end in flowlayoutpanel

Scheduled Pinned Locked Moved Visual Basic
algorithmstutorialquestion
27 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Luc Pattyn

    I'd call it pseudo-code around here :-D

    Luc Pattyn [My Articles] Nil Volentibus Arduum

    N Offline
    N Offline
    Nick Otten
    wrote on last edited by
    #10

    1-0 for you ;)

    1 Reply Last reply
    0
    • N Nick Otten

      Oke started a little project to test a bit around and i think you might find this interesting. i used a form called form1. and placed a listbox on it i called txtscroll. I suggest you make a same sort of window and paste the following code in to see how it works:

      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 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 < 100
              txtscroll.Items.Add(index.ToString())
              index += 1
          Loop
      
          '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
          'place your if/else statement here, its smart to use the scrolled boolean to flip true/false so the messagebox doesnt go on a loop
      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
      
      A Offline
      A Offline
      Ammar_Ahmad
      wrote on last edited by
      #11

      Thanks for the example. but I still can't figure out how I can use this to know if the user has scrolled to the end.

      N 1 Reply Last reply
      0
      • L Luc Pattyn

        private int previousValue;

        public void someEventHandler(...) {
        int currentValue=...;
        if (currentValue==extremeValue && currentValue!=previousValue) doWhatEver();
        previousValue=currentValue;
        }

        :)

        Luc Pattyn [My Articles] Nil Volentibus Arduum

        A Offline
        A Offline
        Ammar_Ahmad
        wrote on last edited by
        #12

        isn't previousValue a readonly value?

        L 1 Reply Last reply
        0
        • A Ammar_Ahmad

          isn't previousValue a readonly value?

          L Offline
          L Offline
          Luc Pattyn
          wrote on last edited by
          #13

          did I declare it read-only? :confused:

          Luc Pattyn [My Articles] Nil Volentibus Arduum

          A 1 Reply Last reply
          0
          • L Luc Pattyn

            did I declare it read-only? :confused:

            Luc Pattyn [My Articles] Nil Volentibus Arduum

            A Offline
            A Offline
            Ammar_Ahmad
            wrote on last edited by
            #14

            Seems like I misunderstood the algorithm.

            1 Reply Last reply
            0
            • A Ammar_Ahmad

              Thanks for the example. but I still can't figure out how I can use this to know if the user has scrolled to the end.

              N Offline
              N Offline
              Nick Otten
              wrote on last edited by
              #15

              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.

              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!
              _
              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!
              \_
              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
              
              A 1 Reply Last reply
              0
              • N Nick Otten

                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.

                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!
                _
                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!
                \_
                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
                
                A Offline
                A Offline
                Ammar_Ahmad
                wrote on last edited by
                #16

                Did you test the code...? Well... Because the above didn't work for me. I made a test project to see how it works. but it didn't show me any message...

                N 1 Reply Last reply
                0
                • A Ammar_Ahmad

                  Did you test the code...? Well... Because the above didn't work for me. I made a test project to see how it works. but it didn't show me any message...

                  N Offline
                  N Offline
                  Nick Otten
                  wrote on last edited by
                  #17

                  Did you recalculate the max value of your scrollbar? if your listbox is of a differed size then mine (witch it probably is) you have to recalculate it. just run the program. dont scroll and see how many items fit into the listbox (for me that where 18). you want to do the index - [the number you found]. after that it should work.

                  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

                  A 1 Reply Last reply
                  0
                  • N Nick Otten

                    Did you recalculate the max value of your scrollbar? if your listbox is of a differed size then mine (witch it probably is) you have to recalculate it. just run the program. dont scroll and see how many items fit into the listbox (for me that where 18). you want to do the index - [the number you found]. after that it should work.

                    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

                    A Offline
                    A Offline
                    Ammar_Ahmad
                    wrote on last edited by
                    #18

                    Oh that kinda worked... but how am I ganna calculate the value in a control like this one: When its normal screen size: http://foto.pk/images/minx.png[^] When its maximized: http://foto.pk/images/maxx.png[^] ------------------------------------------------------------- Btw. You asked why would I want to know this value before... Answer) I don't actually want to show users "yay u reached the bottom" lol. I want the program to get more tweets when it reaches there. The above that I am making is a v2 of my current twitter client called TRocket. TRocket - Twitter Client [Open Source][^]

                    N 1 Reply Last reply
                    0
                    • A Ammar_Ahmad

                      Oh that kinda worked... but how am I ganna calculate the value in a control like this one: When its normal screen size: http://foto.pk/images/minx.png[^] When its maximized: http://foto.pk/images/maxx.png[^] ------------------------------------------------------------- Btw. You asked why would I want to know this value before... Answer) I don't actually want to show users "yay u reached the bottom" lol. I want the program to get more tweets when it reaches there. The above that I am making is a v2 of my current twitter client called TRocket. TRocket - Twitter Client [Open Source][^]

                      N Offline
                      N Offline
                      Nick Otten
                      wrote on last edited by
                      #19

                      How do you fill the listbox? with a loop or a data binding? EDIT: oke something just shot to my mind. the items you add to your listbox are controls right? i forgot the object name but i've seen the code of those. this means they have a fixed sized right? you could calculate how much fit into your listbox if you read out the length and hight of it. lets say for example your listbox is 300 pixels wide and 400 pixels high. your controls are 100 wide and 50 high. this would mean you can fit 3 rows of each 8 items = 24 items without scroll bar. so in a 'math' way:

                      [ammount of items] - (math.floor([with_listbox]/[with_control])+math.floor([hight_listbox]/[hight_control])) = maximum scroll value

                      ------------------- Ah oke, yea now its making sense ;) and i already figured it was for Trocket (read the thread about it) when i was helping you with a previous question.

                      A 1 Reply Last reply
                      0
                      • N Nick Otten

                        How do you fill the listbox? with a loop or a data binding? EDIT: oke something just shot to my mind. the items you add to your listbox are controls right? i forgot the object name but i've seen the code of those. this means they have a fixed sized right? you could calculate how much fit into your listbox if you read out the length and hight of it. lets say for example your listbox is 300 pixels wide and 400 pixels high. your controls are 100 wide and 50 high. this would mean you can fit 3 rows of each 8 items = 24 items without scroll bar. so in a 'math' way:

                        [ammount of items] - (math.floor([with_listbox]/[with_control])+math.floor([hight_listbox]/[hight_control])) = maximum scroll value

                        ------------------- Ah oke, yea now its making sense ;) and i already figured it was for Trocket (read the thread about it) when i was helping you with a previous question.

                        A Offline
                        A Offline
                        Ammar_Ahmad
                        wrote on last edited by
                        #20

                        huh? Sorry but I didn't quiet get that... wasn't quiet good in maths :/ Can you check into the source code: http://www.mediafire.com/?m13i05h0vmb11yc[^] I actually want this to be on Flowlayoutpanel1.

                        N 1 Reply Last reply
                        0
                        • A Ammar_Ahmad

                          huh? Sorry but I didn't quiet get that... wasn't quiet good in maths :/ Can you check into the source code: http://www.mediafire.com/?m13i05h0vmb11yc[^] I actually want this to be on Flowlayoutpanel1.

                          N Offline
                          N Offline
                          Nick Otten
                          wrote on last edited by
                          #21

                          Private Function CalculateMaxScrollValue(ByVal totalitems As Int64, ByVal controlhight As Int32, ByVal controlwith As Int32)
                          'NOTE: 482 and 114 is the size property of your msgctrl.vb
                          Return totalitems - (Math.Floor(controlwith / 482) * Math.Floor(controlhight / 114))
                          End Function

                          Add that function to your code to find the max scroll value. Use that in combination with the code i send you in the previous posts in this topic. replace the txtscroll with the flowlayoutpanel1 and it should work (cant test it here). as a side note: you might want to fine tune the if/else of mine a little to a "<" instead of "=". giving a exact value to a 'analog' control gives it a small change to trigger. also it seems like the program is single threaded. i don't know how long it takes to load those messages but your interface will hang (not responding ect) till the load is complete. looking into threading might be interesting.

                          A 1 Reply Last reply
                          0
                          • N Nick Otten

                            Private Function CalculateMaxScrollValue(ByVal totalitems As Int64, ByVal controlhight As Int32, ByVal controlwith As Int32)
                            'NOTE: 482 and 114 is the size property of your msgctrl.vb
                            Return totalitems - (Math.Floor(controlwith / 482) * Math.Floor(controlhight / 114))
                            End Function

                            Add that function to your code to find the max scroll value. Use that in combination with the code i send you in the previous posts in this topic. replace the txtscroll with the flowlayoutpanel1 and it should work (cant test it here). as a side note: you might want to fine tune the if/else of mine a little to a "<" instead of "=". giving a exact value to a 'analog' control gives it a small change to trigger. also it seems like the program is single threaded. i don't know how long it takes to load those messages but your interface will hang (not responding ect) till the load is complete. looking into threading might be interesting.

                            A Offline
                            A Offline
                            Ammar_Ahmad
                            wrote on last edited by
                            #22

                            Err my laptops fan got fried - is at the repair shop. - sorry for the late reply... Anyway. So you mean I should just call this function on load? and replace the maxscroll = index - 18 on load?

                            N 1 Reply Last reply
                            0
                            • A Ammar_Ahmad

                              Err my laptops fan got fried - is at the repair shop. - sorry for the late reply... Anyway. So you mean I should just call this function on load? and replace the maxscroll = index - 18 on load?

                              N Offline
                              N Offline
                              Nick Otten
                              wrote on last edited by
                              #23

                              Hey, Sorry for my late response. I unfortunately fell ill. to get back to your question: No, you call that function every time after the amount of items in your flowlayoutpanel changes.

                              A 1 Reply Last reply
                              0
                              • N Nick Otten

                                Hey, Sorry for my late response. I unfortunately fell ill. to get back to your question: No, you call that function every time after the amount of items in your flowlayoutpanel changes.

                                A Offline
                                A Offline
                                Ammar_Ahmad
                                wrote on last edited by
                                #24

                                so all the code needs to be same. but what should I do with: maxscroll = index - 18 ? the index property was giving an error in flowlayoutpanel. can you give me the example on the same code or better on the project its self.. :

                                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!
                                _
                                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!
                                \_
                                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
                                
                                N 1 Reply Last reply
                                0
                                • A Ammar_Ahmad

                                  so all the code needs to be same. but what should I do with: maxscroll = index - 18 ? the index property was giving an error in flowlayoutpanel. can you give me the example on the same code or better on the project its self.. :

                                  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!
                                  _
                                  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!
                                  \_
                                  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
                                  
                                  N Offline
                                  N Offline
                                  Nick Otten
                                  wrote on last edited by
                                  #25

                                  hmm oke i admid my code was a bit of mess. i cleared it out a bit and made a example program so you can see how it works. Please follow the below steps. 1. start a new form project 2. Add is Listbox. set the name to txtscroll and the size to 254; 381 3. Add a button, call this one btnadd 4. copy paste the following code into the project (under the form you just made)

                                  Imports System.Runtime.InteropServices

                                  Public Class Form1

                                  #Region "declarations"
                                  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
                                  Private index As Int32 = 0 'used for random loops to fill the txtscroll
                                  Private Const SB_HORZ As Integer = &H0
                                  Private Const SB_VERT As Integer = &H1
                                  #End Region

                                  #Region "dll calls"
                                  'dll used to get the scrollbar value NOTE: if the scrollbar is not visible or you go higher then your max it will crash!
                                  _
                                  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!
                                   \_
                                  Private Shared Function SetScrollPos(ByVal hWnd As IntPtr, ByVal nBar As Integer, ByVal nPos As Integer, ByVal bRedraw As Boolean) As Integer
                                  End Function
                                  

                                  #End Region

                                  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
                                  
                                  A 1 Reply Last reply
                                  0
                                  • N Nick Otten

                                    hmm oke i admid my code was a bit of mess. i cleared it out a bit and made a example program so you can see how it works. Please follow the below steps. 1. start a new form project 2. Add is Listbox. set the name to txtscroll and the size to 254; 381 3. Add a button, call this one btnadd 4. copy paste the following code into the project (under the form you just made)

                                    Imports System.Runtime.InteropServices

                                    Public Class Form1

                                    #Region "declarations"
                                    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
                                    Private index As Int32 = 0 'used for random loops to fill the txtscroll
                                    Private Const SB_HORZ As Integer = &H0
                                    Private Const SB_VERT As Integer = &H1
                                    #End Region

                                    #Region "dll calls"
                                    'dll used to get the scrollbar value NOTE: if the scrollbar is not visible or you go higher then your max it will crash!
                                    _
                                    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!
                                     \_
                                    Private Shared Function SetScrollPos(ByVal hWnd As IntPtr, ByVal nBar As Integer, ByVal nPos As Integer, ByVal bRedraw As Boolean) As Integer
                                    End Function
                                    

                                    #End Region

                                    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
                                    
                                    A Offline
                                    A Offline
                                    Ammar_Ahmad
                                    wrote on last edited by
                                    #26

                                    Alright so here is what I got so far:

                                    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
                                    ' Private index As Int32 = 0 'used for random loops to fill the txtscroll
                                    Private Const SB_HORZ As Integer = &H0
                                    Private Const SB_VERT As Integer = &H1

                                    'dll used to get the scrollbar value NOTE: if the scrollbar is not visible or you go higher then your max it will crash!
                                     \_
                                    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!
                                     \_
                                    Private Shared Function SetScrollPos(ByVal hWnd As IntPtr, ByVal nBar As Integer, ByVal nPos As Integer, ByVal bRedraw As Boolean) As Integer
                                    End Function
                                    
                                    
                                    Public Property HScrollPos() As Integer 'property to set or get the horisontal scrollbar value
                                        Get
                                            Return GetScrollPos(DirectCast(FlowLayoutPanel1.Handle, IntPtr), SB\_HORZ) 'change txtscroll to the control you use. dont forget the .handle
                                        End Get
                                        Set(ByVal value As Integer)
                                            SetScrollPos(DirectCast(FlowLayoutPanel1.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(FlowLayoutPanel1.Handle, IntPtr), SB\_VERT) 'change txtscroll to the control you use. dont forget the .handle
                                        End Get
                                        Set(ByVal value As Integer)
                                            SetScrollPos(DirectCast(FlowLayoutPanel1.Handle, IntPtr), SB\_VERT, value, True) 'change txtscroll to the control you use. dont forget the .handle
                                        End Set
                                    End Property
                                    
                                    'will add load in the end.
                                    
                                    Private Sub FlowLayoutPanel1\_MouseWheelScroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FlowLayoutPanel1.MouseWheel
                                        scrollhandler\_MyScroll(e, e) 'needed to catch the scrollwheel event.
                                    End Sub
                                    
                                    
                                    Private Sub scrollhandler\_MyScroll(ByVal sender As Object, ByVal
                                    
                                    N 1 Reply Last reply
                                    0
                                    • A Ammar_Ahmad

                                      Alright so here is what I got so far:

                                      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
                                      ' Private index As Int32 = 0 'used for random loops to fill the txtscroll
                                      Private Const SB_HORZ As Integer = &H0
                                      Private Const SB_VERT As Integer = &H1

                                      'dll used to get the scrollbar value NOTE: if the scrollbar is not visible or you go higher then your max it will crash!
                                       \_
                                      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!
                                       \_
                                      Private Shared Function SetScrollPos(ByVal hWnd As IntPtr, ByVal nBar As Integer, ByVal nPos As Integer, ByVal bRedraw As Boolean) As Integer
                                      End Function
                                      
                                      
                                      Public Property HScrollPos() As Integer 'property to set or get the horisontal scrollbar value
                                          Get
                                              Return GetScrollPos(DirectCast(FlowLayoutPanel1.Handle, IntPtr), SB\_HORZ) 'change txtscroll to the control you use. dont forget the .handle
                                          End Get
                                          Set(ByVal value As Integer)
                                              SetScrollPos(DirectCast(FlowLayoutPanel1.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(FlowLayoutPanel1.Handle, IntPtr), SB\_VERT) 'change txtscroll to the control you use. dont forget the .handle
                                          End Get
                                          Set(ByVal value As Integer)
                                              SetScrollPos(DirectCast(FlowLayoutPanel1.Handle, IntPtr), SB\_VERT, value, True) 'change txtscroll to the control you use. dont forget the .handle
                                          End Set
                                      End Property
                                      
                                      'will add load in the end.
                                      
                                      Private Sub FlowLayoutPanel1\_MouseWheelScroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FlowLayoutPanel1.MouseWheel
                                          scrollhandler\_MyScroll(e, e) 'needed to catch the scrollwheel event.
                                      End Sub
                                      
                                      
                                      Private Sub scrollhandler\_MyScroll(ByVal sender As Object, ByVal
                                      
                                      N Offline
                                      N Offline
                                      Nick Otten
                                      wrote on last edited by
                                      #27

                                      It seems your making a mistake in providing the arguemnts for your max scroll.

                                      Quote:

                                      Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load scrollhandler = New MyListener(FlowLayoutPanel1) maxscroll = CalcMaxScroll(FlowLayoutPanel1.Size.Height, FlowLayoutPanel1.Size.Width, 114, 1075, 19) '19 number of tweets '114 height of tweettimelinecontrol '1075 width of flowlayoutpanel1 'last number tells the number of items. (read that from a global var) End Sub

                                      You say that the with of your flowlayoutpanel is 1075. yet you apply it to the formula as the with of your tweettimelinecontrol. quoting you from a previous post:

                                      Quote:

                                      Oh that kinda worked... but how am I ganna calculate the value in a control like this one: When its normal screen size: http://foto.pk/images/minx.png\[^\]

                                      you can see in the screenshot that you got 2 of those controls next to eachoter so it can never be the total size of your flowlayoutpanel. please check the with property of your Tweettimelinecontrol and change the value. while your at it also change the 19 with a flowlayoutpanel.items.count to make sure it are 19.

                                      1 Reply Last reply
                                      0
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      • Login

                                      • Don't have an account? Register

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • World
                                      • Users
                                      • Groups