Dans une UserControl
, je souhaite remplacer le curseur de la souris par une flèche en une icône représentant une main.
Ce que je fais actuellement est la suivante:
this.Cursor = Cursors.Hand;
C'est très gentil, cela me donne un curseur de souris ressemblant à ceci:
Mais voici mon problème ... cela montre une main avec un doigt pointé.
Ce dont j'ai besoin, c'est d'une main "agrippante", plus semblable à celle-ci:
Comment puis-je faire cela?, Comment puis-je charger un fichier d'icône (.ico), un fichier de curseur (.cur) ou un fichier d'image (.png) et l'utiliser comme curseur de souris?
Si vous avez un fichier de curseur:
Cursor myCursor = new Cursor("myCursor.cur");
myControl.Cursor = myCursor;
sinon vous devez en créer un:
quelques informations supplémentaires sur curseurs personnalisés
Avez-vous essayé System.Windows.Forms.Cursor curs = new System.Windows.Forms.Cursor(file_name);
?
L'utilisation des curseurs personnalisés avec la classe WinForms Cursor
implique que, lorsque le constructeur de flux, de nom de fichier et de ressources est surchargé, le fichier .cur
fourni doit être noir et blanc en couleur.
Cela signifie que cela ne fonctionnera pas si les fichiers .cur
contiennent des couleurs autres que le noir et le blanc.
Cursor myCursor = new Cursor("myCursor.cur");
myControl.Cursor = myCursor;
Il existe un moyen de contourner cette limitation en utilisant la surcharge du constructeur de descripteurs Windows:
Créez le handle en utilisant l'API Windows:
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern IntPtr LoadCursorFromFile(string fileName);
Ensuite, transmettez-le au constructeur Cursor
approprié, comme ceci:
IntPtr handle = LoadCursorFromFile("myCursor.cur");
Cursor myCursor = new Cursor(handle);
myControl.Cursor = myCursor;
J'espère que cela empêchera d'autres personnes de se gratter la tête en jetant un ArgumentException
indiquant: Image format is not valid. The image file may be corrupted.
lors de l'utilisation de l'autre constructeur Cursor
avec un fichier .cur
contenant de la couleur.
J'ai testé cette méthode. C'est bon. Ceci est mon application:
[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;
}