Manage mouse pointers (Windows Forms .NET)

The mouse pointer, which is sometimes referred to as the cursor, is a bitmap that specifies a focus point on the screen for user input with the mouse. This topic provides an overview of the mouse pointer in Windows Forms and describes some of the ways to modify and control the mouse pointer.

Important

The Desktop Guide documentation for .NET 7 and .NET 6 is under construction.

Accessing the mouse pointer

The mouse pointer is represented by the Cursor class, and each Control has a Control.Cursor property that specifies the pointer for that control. The Cursor class contains properties that describe the pointer, such as the Position and HotSpot properties, and methods that can modify the appearance of the pointer, such as the Show, Hide, and DrawStretched methods.

The following example hides the cursor when the cursor is over a button:

private void button1_MouseEnter(object sender, EventArgs e) =>
    Cursor.Hide();

private void button1_MouseLeave(object sender, EventArgs e) =>
    Cursor.Show();
Private Sub Button1_MouseEnter(sender As Object, e As EventArgs) Handles Button1.MouseEnter
    Cursor.Hide()
End Sub

Private Sub Button1_MouseLeave(sender As Object, e As EventArgs) Handles Button1.MouseLeave
    Cursor.Show()
End Sub

Controlling the mouse pointer

Sometimes you may want to limit the area in which the mouse pointer can be used or change the position the mouse. You can get or set the current location of the mouse using the Position property of the Cursor. In addition, you can limit the area the mouse pointer can be used be setting the Clip property. The clip area, by default, is the entire screen.

The following example positions the mouse pointer between two buttons when they are clicked:

private void button1_Click(object sender, EventArgs e) =>
    Cursor.Position = PointToScreen(button2.Location);

private void button2_Click(object sender, EventArgs e) =>
    Cursor.Position = PointToScreen(button1.Location);
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    PointToScreen(Button2.Location)
End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    PointToScreen(Button1.Location)
End Sub

Changing the mouse pointer

Changing the mouse pointer is an important way of providing feedback to the user. For example, the mouse pointer can be modified in the handlers of the MouseEnter and MouseLeave events to tell the user that computations are occurring and to limit user interaction in the control. Sometimes, the mouse pointer will change because of system events, such as when your application is involved in a drag-and-drop operation.

The primary way to change the mouse pointer is by setting the Control.Cursor or DefaultCursor property of a control to a new Cursor. For examples of changing the mouse pointer, see the code example in the Cursor class. In addition, the Cursors class exposes a set of Cursor objects for many different types of pointers, such as a pointer that resembles a hand.

The following example changes the cursor of the mouse pointer for a button to a hand:

button2.Cursor = System.Windows.Forms.Cursors.Hand;
Button2.Cursor = System.Windows.Forms.Cursors.Hand

To display the wait pointer, which resembles an hourglass, whenever the mouse pointer is on the control, use the UseWaitCursor property of the Control class.

See also