Slaine
Slaine

Reputation: 41

How can i change cursor for a window in C#?

When i'm trying to change cursor to a custom one, for a single window, with SetCursor() function (using user32.dll), it changes it, but when mouse starts moving, cursor changes to default one. So, there's a question appeared, how can i change cursor for a single window, with a custom cursor?

Upvotes: 1

Views: 6078

Answers (5)

Aaron Keynz
Aaron Keynz

Reputation: 11

    public Form1()
    {
        this.ClientSize = new System.Drawing.Size(292, 266);
        this.Text = "Cursor Example";

        // The following generates a cursor from an embedded resource. 

        // To add a custom cursor, create a bitmap 
        //        1. Add a new cursor file to your project:  
        //                Project->Add New Item->General->Cursor File 

        // --- To make the custom cursor an embedded resource  --- 

        // In Visual Studio: 
        //        1. Select the cursor file in the Solution Explorer 
        //        2. Choose View->Properties. 
        //        3. In the properties window switch "Build Action" to "Embedded Resources" 

        // On the command line: 
        //        Add the following flag: 
        //            /res:CursorFileName.cur,Namespace.CursorFileName.cur 
        //         
        //        Where "Namespace" is the namespace in which you want to use the cursor
        //        and   "CursorFileName.cur" is the cursor filename.

        // The following line uses the namespace from the passed-in type 
        // and looks for CustomCursor.MyCursor.Cur in the assemblies manifest. 
    // NOTE: The cursor name is acase sensitive. 
        this.Cursor = new Cursor(GetType(), "MyCursor.cur");  

    }

http://msdn.microsoft.com/en-us/library/system.windows.forms.cursor.aspx

Upvotes: 1

Daren Thomas
Daren Thomas

Reputation: 70314

I like to wrap this in a try / finally:

try
{
    this.Cursor = Cursors.Wait;
}
finally
{
    this.Cursor = Cursors.Default;
}

This ensures that you actually revert the cursor back - even if an error happens. What I've also done in the past (for complicated modal dialog situations) is have a stack of cursors and push the current cursor on to the stack before changing the cursor, popping it off again in the finally clause.

Upvotes: 3

Bibhu
Bibhu

Reputation: 4081

You can change it using the cursor class programtically, like this,

     this.Cursor = Cursors.WaitCursor;

To change it back to normal,

     this.Cursor = Cursors.Default; 

Upvotes: 1

Grant Thomas
Grant Thomas

Reputation: 45083

There is no need to use native Windows functions.

Take a look at the Cursor class, and the exposed Cursor property of controls, which you can set.

control.Cursor = Cursors.Hand;

Upvotes: 1

Maziar Taheri
Maziar Taheri

Reputation: 2338

how about using Cursor property of the form?

this.Cursor = System.Windows.Forms.Cursors.No;

Upvotes: 0

Related Questions