how to AutoScroll Listbox in continuous manner in VB.net?
then start again from
You can set the index of the topmost entry with the TopIndex property. If you want to scroll automatically you could use a timer and modify the value of TopIndex on each timer event.
It sounds to me that you want the selection to loop from one end to the other when a person is scrolling with the arrow keys. This can be done with a combination of handling both the keydown and the keyup events and using a class level boolean:
Private Sub ListBox1_KeyUp(sender As Object, e As KeyEventArgs) Handles ListBox1.KeyUp If e.KeyCode = Keys.Down AndAlso ListBox1.SelectedIndex = ListBox1.Items.Count - 1 AndAlso Not keytrap Then ListBox1.SelectedIndex = 0 keytrap = True End If If e.KeyCode = Keys.Up And ListBox1.SelectedIndex = 0 AndAlso Not keytrap Then ListBox1.SelectedIndex = ListBox1.Items.Count - 1 keytrap = True End If End Sub 'This is needed to avoid the keyup event handler changing the index when the selection moves to the end from the second to the end. Dim keytrap As Boolean = False Private Sub ListBox1_KeyDown(sender As Object, e As KeyEventArgs) Handles ListBox1.KeyDown If e.KeyCode = Keys.Down Then If ListBox1.SelectedIndex = ListBox1.Items.Count - 2 Then keytrap = True ElseIf ListBox1.SelectedIndex = ListBox1.Items.Count - 1 Then keytrap = False End If End If If e.KeyCode = Keys.Up Then If ListBox1.SelectedIndex = 1 Then keytrap = True ElseIf ListBox1.SelectedIndex = 0 Then keytrap = False End If End If End Sub
When the selection is at the top or the bottom pressing the appropriate arrow will move the selection to the other end of the list.
thnk, but want to Scroll Listbox item in continuous manner with timer and button
tinstaa ? , the only person on this site who post ex. keep up the work.
What you probably want is, in the handler for the timer tick event, to increment the selectedindex of the listbox and a button to toggle the timer off and on. when the index reaches listbox.items.count, which is one past the highest index, reset the index to 0. One way to do that is to use the
Mod operator. So that:
ListBox1.SelectedIndex = (ListBox1.SelectedIndex + 1) Mod ListBox1.Item.Count
This will automatically loop around to 0 when it reaches the top index.
This also has the advantage that if you edit the items the code will react to the new count.
Create a listbox, ListBox1, and a timer, Timer1.
Public Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load Timer1.Interval = 1000 Timer1.Start() End Sub Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick Dim numitems As Integer = ListBox1.Height \ ListBox1.ItemHeight If ListBox1.TopIndex < ListBox1.Items.Count - numitems Then ListBox1.TopIndex += 1 Else ListBox1.TopIndex = 0 End If End Sub End Class
By calculating and using numitems (the number of displayed lines) you can reset to the top of the list after the last item is displayed.
Just for completeness:
Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick ListBox1.SelectedIndex = (ListBox1.SelectedIndex + 1) Mod ListBox1.Item.Count End Sub
Now you have 2 methods to choose from, the displayed items changing 1 item at a time and starting over when you reach the end or selecting each item in turn and looping to the top when it gets to the end.