This topic has not yet been rated - Rate this topic

ScrollableControl.Scroll Event

Occurs when the user or code scrolls through the client area.

Namespace:  System.Windows.Forms
Assembly:  System.Windows.Forms (in System.Windows.Forms.dll)
public event ScrollEventHandler Scroll

The Scroll event occurs when the user scrolls through the client area by interacting with the scroll bars, or when the user navigates between controls and the active control scrolls into view. The Scroll event also occurs when you write code, such as setting the AutoScrollPosition property, that scrolls through the client area.

You can use the ScrollOrientation property in your event handler to determine the scroll bar orientation for the Scroll event.

For more information about handling events, see Consuming Events.

The following code example demonstrates the use of this member. In the example, an event handler reports on the occurrence of the Scroll event. This report helps you to learn when the event occurs and can assist you in debugging. To report on multiple events or on events that occur frequently, consider replacing MessageBox.Show with Console.WriteLine or appending the message to a multiline TextBox.

To run the example code, paste it into a project that contains an instance of a type that inherits from ScrollableControl, such as a Panel or ContainerControl. Then name the instance ScrollableControl1 and ensure that the event handler is associated with the Scroll event.


private void ScrollableControl1_Scroll(Object sender, ScrollEventArgs e) {

System.Text.StringBuilder messageBoxCS = new System.Text.StringBuilder();
messageBoxCS.AppendFormat("{0} = {1}", "ScrollOrientation", e.ScrollOrientation );
messageBoxCS.AppendLine();
messageBoxCS.AppendFormat("{0} = {1}", "Type", e.Type );
messageBoxCS.AppendLine();
messageBoxCS.AppendFormat("{0} = {1}", "NewValue", e.NewValue );
messageBoxCS.AppendLine();
messageBoxCS.AppendFormat("{0} = {1}", "OldValue", e.OldValue );
messageBoxCS.AppendLine();
MessageBox.Show(messageBoxCS.ToString(), "Scroll Event" );
}


.NET Framework

Supported in: 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Event does not fire if scroll is changed in code
The event fires fine for manual changes to the scroll positions but not to changes made by code.

Test as follows:

Private Sub Panel1_Scroll(ByVal sender As Object, ByVal e As System.Windows.Forms.ScrollEventArgs) Handles Panel1.Scroll
    Debug.Print("#> " & Panel1.HorizontalScroll.Value & ", " & Panel1.VerticalScroll.Value)
End Sub

Then somwhere else: 
    Panel1.AutoScrollPosition = New Point(scrHor, scrVer)
...
    Panel1.HorizontalScroll.Value = scrHor
...
    Panel1.VerticalScroll.Value = scrVer  

You can see the change in the display for each of these but no event if the scroll was not moved manually.
Scroll Event does not seem to fire.

I have added various controls to a tab page. In one of the controls I have added the following code:

Private Sub AssemblyExaminerControl_Load(sender As Object, e As System.EventArgs) Handles Me.ParentChanged
    Dim c As ScrollableControl = Me.Parent
    AddHandler c.Scroll, AddressOf MyScroll
End Sub

Public Sub MyScroll(sender As Object, e As ScrollEventArgs)
    Me.Invalidate()
End Sub

It seems that the scroll event does not fire and therefore cannot be trapped.
Any assistance or hints would be appreciated.