Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Export (0) Print
Expand All

Control.MouseWheel Event

Occurs when the mouse wheel moves while the control has focus.

Namespace: System.Windows.Forms
Assembly: System.Windows.Forms (in system.windows.forms.dll)

Public Event MouseWheel As MouseEventHandler
Dim instance As Control
Dim handler As MouseEventHandler

AddHandler instance.MouseWheel, handler

/** @event */
public void add_MouseWheel (MouseEventHandler value)

/** @event */
public void remove_MouseWheel (MouseEventHandler value)

In JScript, you can handle the events defined by a class, but you cannot define your own.
Not applicable.

When handling the MouseWheel event it is important to follow the user interface (UI) standards associated with the mouse wheel. The MouseEventArgs.Delta property value indicates the amount the mouse wheel has been moved. The UI should scroll when the accumulated delta is plus or minus 120. The UI should scroll the number of logical lines returned by the SystemInformation.MouseWheelScrollLines property for every delta value reached. You can also scroll more smoothly in smaller that 120 unit increments, however the ratio should remain constant, that is SystemInformation.MouseWheelScrollLines lines scrolled per 120 delta units of wheel movement.

For more information about handling mouse wheel messages, see the WM_MOUSEWHEEL message documentation in the Windows Platform SDK reference located in the MSDN library at http://msdn.microsoft.com/library.

Mouse events occur in the following order:

  1. MouseEnter

  2. MouseMove

  3. MouseHover / MouseDown / MouseWheel

  4. MouseUp

  5. MouseLeave

For more information about handling events, see Consuming Events.

The following code example demonstrates using different mouse events to draw the path of the mouse on a Panel. A line segment is added to the GraphicsPath for each MouseMove and MouseDown events that occur. To update the graphics, the Invalidate method is called for the Panel on each MouseDown and MouseUp event. In addition, the graphic path is scrolled up or down when the MouseWheel event occurs. Additional mouse events, like MouseHover, are identified on screen as well. Also displayed on the screen is additional information about the mouse from the SystemInformation class.

Imports System
Imports System.Drawing
Imports System.Windows.Forms

Namespace MouseEvent
    ' Summary description for Form1.
    Public NotInheritable Class Form1
        Inherits System.Windows.Forms.Form

        Friend WithEvents panel1 As System.Windows.Forms.Panel
        Private label1 As System.Windows.Forms.Label
        Private label2 As System.Windows.Forms.Label
        Private label3 As System.Windows.Forms.Label
        Private label4 As System.Windows.Forms.Label
        Private label5 As System.Windows.Forms.Label
        Private label6 As System.Windows.Forms.Label
        Private label7 As System.Windows.Forms.Label
        Private label8 As System.Windows.Forms.Label
        Private label9 As System.Windows.Forms.Label
        Friend WithEvents clearButton As System.Windows.Forms.Button
        Private mousePath As System.Drawing.Drawing2D.GraphicsPath
        Private groupBox1 As System.Windows.Forms.GroupBox

        Private fontSize As Integer = 20
        <System.STAThread()>  _
        Public Shared Sub Main()
            System.Windows.Forms.Application.Run(New Form1())
        End Sub 'Main

        Public Sub New()

            mousePath = New System.Drawing.Drawing2D.GraphicsPath()

            Me.panel1 = New System.Windows.Forms.Panel()
            Me.label1 = New System.Windows.Forms.Label()
            Me.clearButton = New System.Windows.Forms.Button()
            Me.label2 = New System.Windows.Forms.Label()
            Me.label3 = New System.Windows.Forms.Label()
            Me.label4 = New System.Windows.Forms.Label()
            Me.label5 = New System.Windows.Forms.Label()
            Me.label6 = New System.Windows.Forms.Label()
            Me.label7 = New System.Windows.Forms.Label()
            Me.label8 = New System.Windows.Forms.Label()
            Me.label9 = New System.Windows.Forms.Label()
            Me.groupBox1 = New System.Windows.Forms.GroupBox()

            ' Mouse Events Label
            Me.label1.Location = New System.Drawing.Point(24, 504) 
            Me.label1.Size = New System.Drawing.Size(392, 23) 
            ' DoubleClickSize Label
            Me.label2.AutoSize = True 
            Me.label2.Location = New System.Drawing.Point(24, 48) 
            Me.label2.Size = New System.Drawing.Size(35, 13) 
            ' DoubleClickTime Label
            Me.label3.AutoSize = True 
            Me.label3.Location = New System.Drawing.Point(24, 72) 
            Me.label3.Size = New System.Drawing.Size(35, 13) 
            ' MousePresent Label
            Me.label4.AutoSize = True 
            Me.label4.Location = New System.Drawing.Point(24, 96) 
            Me.label4.Size = New System.Drawing.Size(35, 13) 
            ' MouseButtons Label
            Me.label5.AutoSize = True 
            Me.label5.Location = New System.Drawing.Point(24, 120) 
            Me.label5.Size = New System.Drawing.Size(35, 13) 
            ' MouseButtonsSwapped Label
            Me.label6.AutoSize = True 
            Me.label6.Location = New System.Drawing.Point(320, 48) 
            Me.label6.Size = New System.Drawing.Size(35, 13) 
            ' MouseWheelPresent Label
            Me.label7.AutoSize = True 
            Me.label7.Location = New System.Drawing.Point(320, 72) 
            Me.label7.Size = New System.Drawing.Size(35, 13) 
            ' MouseWheelScrollLines Label
            Me.label8.AutoSize = True 
            Me.label8.Location = New System.Drawing.Point(320, 96) 
            Me.label8.Size = New System.Drawing.Size(35, 13) 
            ' NativeMouseWheelSupport Label
            Me.label9.AutoSize = True 
            Me.label9.Location = New System.Drawing.Point(320, 120) 
            Me.label9.Size = New System.Drawing.Size(35, 13) 

            ' Mouse Panel
            Me.panel1.Anchor = System.Windows.Forms.AnchorStyles.Top Or _
                                    System.Windows.Forms.AnchorStyles.Left Or _
            Me.panel1.BackColor = System.Drawing.SystemColors.ControlDark
            Me.panel1.Location = New System.Drawing.Point(16, 160)
            Me.panel1.Size = New System.Drawing.Size(664, 320)

            ' Clear Button
            Me.clearButton.Anchor = System.Windows.Forms.AnchorStyles.Top Or _
            Me.clearButton.Location = New System.Drawing.Point(592, 504)
            Me.clearButton.TabIndex = 1
            Me.clearButton.Text = "Clear"

            ' GroupBox
            Me.groupBox1.Anchor = System.Windows.Forms.AnchorStyles.Top Or _
                                  System.Windows.Forms.AnchorStyles.Left Or _
            Me.groupBox1.Location = New System.Drawing.Point(16, 24)
            Me.groupBox1.Size = New System.Drawing.Size(664, 128)
            Me.groupBox1.Text = "System.Windows.Forms.SystemInformation"

            ' Set up how the form should be displayed and add the controls to the form.
            Me.ClientSize = New System.Drawing.Size(696, 534)
            Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.label9, _
                            Me.label8, Me.label7, Me.label6, Me.label5, Me.label4, _
                            Me.label3, Me.label2, Me.clearButton, Me.panel1, Me.label1, Me.groupBox1})

            Me.Text = "Mouse Event Example"

            ' Display information about the system mouse.
            label2.Text = "SystemInformation.DoubleClickSize: " + SystemInformation.DoubleClickSize.ToString()
            label3.Text = "SystemInformation.DoubleClickTime: " + SystemInformation.DoubleClickTime.ToString()
            label4.Text = "SystemInformation.MousePresent: " + SystemInformation.MousePresent.ToString()
            label5.Text = "SystemInformation.MouseButtons: " + SystemInformation.MouseButtons.ToString()
            label6.Text = "SystemInformation.MouseButtonsSwapped: " + SystemInformation.MouseButtonsSwapped.ToString()
            label7.Text = "SystemInformation.MouseWheelPresent: " + SystemInformation.MouseWheelPresent.ToString()
            label8.Text = "SystemInformation.MouseWheelScrollLines: " + SystemInformation.MouseWheelScrollLines.ToString()
            label9.Text = "SystemInformation.NativeMouseWheelSupport: " + SystemInformation.NativeMouseWheelSupport.ToString()
        End Sub 'New

        Private Sub panel1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles panel1.MouseDown
            ' Update the mouse path with the mouse information
            Dim mouseDownLocation As New Point(e.X, e.Y)
            Dim eventString As String = Nothing
            Select Case e.Button
                Case MouseButtons.Left
                    eventString = "L"
                Case MouseButtons.Right
                    eventString = "R"
                Case MouseButtons.Middle
                    eventString = "M"
                Case MouseButtons.XButton1
                    eventString = "X1"
                Case MouseButtons.XButton2
                    eventString = "X2"
                Case MouseButtons.None:
                     eventString = Nothing              
            End Select
            If (eventString IsNot Nothing) Then
                mousePath.AddString(eventString, FontFamily.GenericSerif, CInt(FontStyle.Bold), fontSize, mouseDownLocation, StringFormat.GenericDefault)
                mousePath.AddLine(mouseDownLocation, mouseDownLocation)
            End If

        End Sub 
        Private Sub panel1_MouseEnter(sender As Object, e As System.EventArgs) Handles panel1.MouseEnter
            ' Update the mouse event label to indicate the MouseEnter event occurred.
            label1.Text = sender.GetType().ToString() + ": MouseEnter"
        End Sub
        Private Sub panel1_MouseHover(sender As Object, e As System.EventArgs) Handles panel1.MouseHover
            ' Update the mouse event label to indicate the MouseHover event occurred.
            label1.Text = sender.GetType().ToString() + ": MouseHover"
        End Sub
        Private Sub panel1_MouseLeave(sender As Object, e As System.EventArgs) Handles panel1.MouseLeave
            ' Update the mouse event label to indicate the MouseLeave event occurred.
            label1.Text = sender.GetType().ToString() + ": MouseLeave"
        End Sub
        Private Sub panel1_MouseMove(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles panel1.MouseMove
            ' Update the mouse path that is drawn onto the Panel.
            Dim mouseX As Integer = e.X
            Dim mouseY As Integer = e.Y
            mousePath.AddLine(mouseX, mouseY, mouseX, mouseY)
        End Sub
        Private Sub panel1_MouseWheel(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles panel1.MouseWheel
            ' Update the drawing based upon the mouse wheel scrolling.
            Dim numberOfTextLinesToMove As Integer = CInt(e.Delta * SystemInformation.MouseWheelScrollLines / 120) 
            Dim numberOfPixelsToMove As Integer = numberOfTextLinesToMove * fontSize
            If numberOfPixelsToMove <> 0 Then
                Dim translateMatrix As New System.Drawing.Drawing2D.Matrix()
                translateMatrix.Translate(0, numberOfPixelsToMove)
            End If

        End Sub
        Private Sub panel1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles panel1.MouseUp
            Dim mouseUpLocation As New System.Drawing.Point(e.X, e.Y)
            ' Show the number of clicks in the path graphic.
            Dim numberOfClicks As Integer = e.Clicks
            mousePath.AddString("     " + numberOfClicks.ToString(), _
                                FontFamily.GenericSerif, CInt(FontStyle.Bold), _
                                fontSize, mouseUpLocation, StringFormat.GenericDefault)

        End Sub
        Private Sub panel1_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles panel1.Paint
            ' Perform the painting of the Panel.
            e.Graphics.DrawPath(System.Drawing.Pens.DarkRed, mousePath)
        End Sub
        Private Sub clearButton_Click(sender As Object, e As System.EventArgs) Handles clearButton.Click
            ' Clear the Panel display.
            mousePath = New System.Drawing.Drawing2D.GraphicsPath()
        End Sub
    End Class 'Form1
End Namespace

package MouseEvent;
import System.*;
import System.Drawing.*;
import System.Windows.Forms.*;

public class Form1 extends System.Windows.Forms.Form
    private System.Windows.Forms.Panel panel1;
    private System.Windows.Forms.Label label1;
    private System.Windows.Forms.Label label2;
    private System.Windows.Forms.Label label3;
    private System.Windows.Forms.Label label4;
    private System.Windows.Forms.Label label5;
    private System.Windows.Forms.Label label6;
    private System.Windows.Forms.Label label7;
    private System.Windows.Forms.Label label8;
    private System.Windows.Forms.Label label9;
    private System.Windows.Forms.Button clearButton;
    private System.Drawing.Drawing2D.GraphicsPath mousePath;
    private System.Windows.Forms.GroupBox groupBox1;
    private int fontSize = 20;

    /** @attribute STAThread()
    public static void main(String[] args)
        Application.Run(new Form1());
    } //main

    public Form1()
        mousePath = new System.Drawing.Drawing2D.GraphicsPath();

        this.panel1 = new System.Windows.Forms.Panel();
        this.label1 = new System.Windows.Forms.Label();
        this.clearButton = new System.Windows.Forms.Button();
        this.label2 = new System.Windows.Forms.Label();
        this.label3 = new System.Windows.Forms.Label();
        this.label4 = new System.Windows.Forms.Label();
        this.label5 = new System.Windows.Forms.Label();
        this.label6 = new System.Windows.Forms.Label();
        this.label7 = new System.Windows.Forms.Label();
        this.label8 = new System.Windows.Forms.Label();
        this.label9 = new System.Windows.Forms.Label();
        this.groupBox1 = new System.Windows.Forms.GroupBox();
        // Mouse Events Label
        this.label1.set_Location(new System.Drawing.Point(24, 504));
        this.label1.set_Size(new System.Drawing.Size(392, 23));
        // DoubleClickSize Label
        this.label2.set_Location(new System.Drawing.Point(24, 48));
        this.label2.set_Size(new System.Drawing.Size(35, 13));
        // DoubleClickTime Label
        this.label3.set_Location(new System.Drawing.Point(24, 72));
        this.label3.set_Size(new System.Drawing.Size(35, 13));
        // MousePresent Label
        this.label4.set_Location(new System.Drawing.Point(24, 96));
        this.label4.set_Size(new System.Drawing.Size(35, 13));
        // MouseButtons Label
        this.label5.set_Location(new System.Drawing.Point(24, 120));
        this.label5.set_Size(new System.Drawing.Size(35, 13));
        // MouseButtonsSwapped Label
        this.label6.set_Location(new System.Drawing.Point(320, 48));
        this.label6.set_Size(new System.Drawing.Size(35, 13));
        // MouseWheelPresent Label
        this.label7.set_Location(new System.Drawing.Point(320, 72));
        this.label7.set_Size(new System.Drawing.Size(35, 13));
        // MouseWheelScrollLines Label
        this.label8.set_Location(new System.Drawing.Point(320, 96));
        this.label8.set_Size(new System.Drawing.Size(35, 13));
        // NativeMouseWheelSupport Label
        this.label9.set_Location(new System.Drawing.Point(320, 120));
        this.label9.set_Size(new System.Drawing.Size(35, 13));
        // Mouse Panel
            | System.Windows.Forms.AnchorStyles.Left
            | System.Windows.Forms.AnchorStyles.Right);
        this.panel1.set_Location(new System.Drawing.Point(16, 160));
        this.panel1.set_Size(new System.Drawing.Size(664, 320));
            new System.Windows.Forms.MouseEventHandler(this.panel1_MouseUp));
        this.panel1.add_Paint(new System.Windows.Forms.PaintEventHandler(
        this.panel1.add_MouseEnter(new System.EventHandler(
        this.panel1.add_MouseHover(new System.EventHandler(
            new System.Windows.Forms.MouseEventHandler(this.panel1_MouseMove));
            new System.EventHandler(this.panel1_MouseLeave));
            new System.Windows.Forms.MouseEventHandler(this.panel1_MouseDown));
            new System.Windows.Forms.MouseEventHandler(this.panel1_MouseWheel));
        // Clear Button
            | System.Windows.Forms.AnchorStyles.Right);
        this.clearButton.set_Location(new System.Drawing.Point(592, 504));
        this.clearButton.add_Click(new System.EventHandler(
        // GroupBox
            | System.Windows.Forms.AnchorStyles.Left
            | System.Windows.Forms.AnchorStyles.Right);
        this.groupBox1.set_Location(new System.Drawing.Point(16, 24));
        this.groupBox1.set_Size(new System.Drawing.Size(664, 128));
        // Set up how the form should be displayed and add the controls
        // to the form.
        this.set_ClientSize(new System.Drawing.Size(696, 534));
        this.get_Controls().AddRange(new System.Windows.Forms.Control[] {
            this.label9, this.label8, this.label7, this.label6, this.label5,
            this.label4, this.label3, this.label2, this.clearButton,
            this.panel1, this.label1, this.groupBox1 });
        this.set_Text("Mouse Event Example");
        // Displays information about the system mouse.
        label2.set_Text("SystemInformation.DoubleClickSize: "
            + SystemInformation.get_DoubleClickSize().ToString());
        label3.set_Text("SystemInformation.DoubleClickTime: "
            + ((Int32)SystemInformation.get_DoubleClickTime()).ToString());
        label4.set_Text("SystemInformation.MousePresent: "
            + ((System.Boolean)SystemInformation.get_MousePresent()).ToString());
        label5.set_Text("SystemInformation.MouseButtons: "
            + ((Int32)SystemInformation.get_MouseButtons()).ToString());
        label6.set_Text("SystemInformation.MouseButtonsSwapped: "
            + ((System.Boolean)SystemInformation.get_MouseButtonsSwapped()).
        label7.set_Text("SystemInformation.MouseWheelPresent: "
            + ((System.Boolean)SystemInformation.get_MouseWheelPresent()).
        label8.set_Text("SystemInformation.MouseWheelScrollLines: "
            + ((Int32)SystemInformation.get_MouseWheelScrollLines()).
        label9.set_Text("SystemInformation.NativeMouseWheelSupport: "
            + ((System.Boolean)SystemInformation.
    } //Form1

    private void panel1_MouseDown(Object sender,
        System.Windows.Forms.MouseEventArgs e)
        // Update the mouse path with the mouse information
        Point mouseDownLocation = new Point(e.get_X(), e.get_Y());

        String eventString = null;
        switch (e.get_Button()) {
            case MouseButtons.Left:
                eventString = "L";
            case MouseButtons.Right:
                eventString = "R";
            case MouseButtons.Middle:
                eventString = "M";
            case MouseButtons.XButton1:
                eventString = "X1";
            case MouseButtons.XButton2:
                eventString = "X2";
            case MouseButtons.None:

        if (eventString != null) {
            mousePath.AddString(eventString, FontFamily.get_GenericSerif(),
                (int)FontStyle.Bold, fontSize, mouseDownLocation,
        else {
            mousePath.AddLine(mouseDownLocation, mouseDownLocation);
    } //panel1_MouseDown

    private void panel1_MouseEnter(Object sender, System.EventArgs e)
        // Update the mouse event label to indicate the MouseEnter event occurred.
        label1.set_Text(sender.GetType().ToString() + ": MouseEnter");
    } //panel1_MouseEnter

    private void panel1_MouseHover(Object sender, System.EventArgs e)
        // Update the mouse event label to indicate the MouseHover event occurred.
        label1.set_Text(sender.GetType().ToString() + ": MouseHover");
    } //panel1_MouseHover

    private void panel1_MouseLeave(Object sender, System.EventArgs e)
        // Update the mouse event label to indicate the MouseLeave event occurred.
        label1.set_Text(sender.GetType().ToString() + ": MouseLeave");
    } //panel1_MouseLeave

    private void panel1_MouseMove(Object sender,
        System.Windows.Forms.MouseEventArgs e)
        // Update the mouse path that is drawn onto the Panel.
        int mouseX = e.get_X();
        int mouseY = e.get_Y();

        mousePath.AddLine(mouseX, mouseY, mouseX, mouseY);
    } //panel1_MouseMove

    private void panel1_MouseWheel(Object sender,
        System.Windows.Forms.MouseEventArgs e)
        // Update the drawing based upon the mouse wheel scrolling.
        int numberOfTextLinesToMove =
            e.get_Delta() * SystemInformation.get_MouseWheelScrollLines() / 120;
        int numberOfPixelsToMove = numberOfTextLinesToMove * fontSize;

        if (numberOfPixelsToMove != 0) {
            System.Drawing.Drawing2D.Matrix translateMatrix =
                new System.Drawing.Drawing2D.Matrix();
            translateMatrix.Translate(0, numberOfPixelsToMove);
    } //panel1_MouseWheel

    private void panel1_MouseUp(Object sender,
        System.Windows.Forms.MouseEventArgs e)
        Point mouseUpLocation = new System.Drawing.Point(e.get_X(), e.get_Y());
        // Show the number of clicks in the path graphic.
        int numberOfClicks = e.get_Clicks();
        mousePath.AddString("    " + ((Int32)numberOfClicks).ToString(),
            FontFamily.get_GenericSerif(), (int)(FontStyle.Bold), fontSize,
            mouseUpLocation, StringFormat.get_GenericDefault());

    } //panel1_MouseUp

    private void panel1_Paint(Object sender,
        System.Windows.Forms.PaintEventArgs e)
        // Perform the painting of the Panel.
        e.get_Graphics().DrawPath(System.Drawing.Pens.get_DarkRed(), mousePath);
    } //panel1_Paint

    private void clearButton_Click(Object sender, System.EventArgs e)
        // Clear the Panel display.
        mousePath = new System.Drawing.Drawing2D.GraphicsPath();
    } //clearButton_Click
} //Form1

Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.

.NET Framework

Supported in: 3.0, 2.0, 1.1, 1.0

Community Additions

© 2015 Microsoft