Search code examples
c#winformscursormouseevent

Cursor keeps resetting to default unless I set it on MouseMove


Have a simple form that has a PictureBox in one location. I want to change the cursor to the Cross cursor when entering that control, and change it back when it leaves.

private void Canvas_MouseEnter(object sender, EventArgs e)
    {
        this.Canvas.Cursor = Cursors.Cross;
    }

    private void Canvas_MouseLeave(object sender, EventArgs e)
    {
                    this.Canvas.Cursor = Cursors.Default;
    }

This doesn't work. If I look closely, I can see it quickly change on MouseEnter, but it flips right back to the default cursor. I have to add "this.Canvas.Cursor = Cursors.Cross;" to the MouseMove event in order for it to work, but then I can constantly see it flickering back to the default cursor.

What gives? This is the only cursor-related code in my whole application, what would be causing it to reset to the default cursor every time I move the mouse?

Thanks.

EDIT: I am an idiot. Person I am collaborating with on this little app had some cursor code tucked away somewhere else that was causing the problem. Thanks guys.


Solution

  • I've tried in a new project from scratch (with just the mouseenter/leave handlers and nothing else) and it works.

    Might be something else in your application ?