如何在使用Windows窗体应用程序时将鼠标光标更改为自定义的光标?

UserControl我想将鼠标光标从箭头改为手形图标。
我目前做的是这样的:

 this.Cursor = Cursors.Hand; 

这是非常好的,它给了我一个像这样的鼠标光标:

在这里输入图像说明

但是这里出现了我的问题…这显示了一个用手指指着的手。
我需要的是一个“抓”的手,更像这个:

在这里输入图像说明

我该怎么做?如何加载图标文件(.ico),光标文件(.cur)或图像文件(.png),并将其用作鼠标光标?

如果你有一个游标文件:

 Cursor myCursor = new Cursor("myCursor.cur"); myControl.Cursor = myCursor; 

否则你必须创build一个:

一些关于自定义游标的更多信息

你有没有尝试过System.Windows.Forms.Cursor curs = new System.Windows.Forms.Cursor(file_name);

在WinForms Cursor类中使用自定义游标的一个注意事项是,当使用stream,文件名和资源构造函数重载时,提供的.cur文件必须是黑白的

这意味着如果.cur文件除了黑白以外还包含任何颜色,这将不起作用。

 Cursor myCursor = new Cursor("myCursor.cur"); myControl.Cursor = myCursor; 

通过使用Windows句柄构造函数重载,可以解决此限制:

通过使用Windows API创build句柄:

 [System.Runtime.InteropServices.DllImport("user32.dll")] public static extern IntPtr LoadCursorFromFile(string fileName); 

然后将其传递给适当的Cursor构造函数,如下所示:

 IntPtr handle = LoadCursorFromFile("myCursor.cur"); Cursor myCursor = new Cursor(handle); myControl.Cursor = myCursor; 

我希望这可以防止他人抓到一个ArgumentException引发说: Image format is not valid. The image file may be corrupted. Image format is not valid. The image file may be corrupted. 当使用包含颜色的.cur文件的其他Cursor构造函数重载时。

我testing了这个方法。 没关系。 这是我的申请:

  [System.Runtime.InteropServices.DllImport("user32.dll")] public static extern IntPtr LoadCursorFromFile(string fileName); Cursor myCursor; private void tsbtn_ZoomIn_Click(object sender, EventArgs e) { IntPtr handle = LoadCursorFromFile("view_zoom_in.cur"); myCursor = new Cursor(handle); zg1.Cursor = myCursor; }