¿Cómo cambiar el cursor del ratón a uno personalizado cuando se trabaja con aplicaciones de Windows Forms?
En un UserControl
quiero cambiar el cursor del ratón de la flecha, a un icono de mano.
Lo que hago actualmente es esto:
this.Cursor = Cursors.Hand;
Esto es muy bonito, me da un cursor del ratón que se ve así:
Pero aquí viene mi problema... esto muestra una mano con un dedo que señala.
Lo que necesito es una mano "agarrando", más como esta:
¿Cómo hago esto?, ¿Cómo puedo cargar un archivo de icono (.ico), un archivo de cursor (.cur), o archivo de imagen (.png), y uso como el cursor del ratón?
4 answers
Si tiene un archivo de cursor:
Cursor myCursor = new Cursor("myCursor.cur");
myControl.Cursor = myCursor;
De lo contrario tienes que crear uno:
Más información sobre cursores personalizados
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-19 07:32:35
¿has probado System.Windows.Forms.Cursor curs = new System.Windows.Forms.Cursor(file_name);
?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-07-19 07:36:12
Una advertencia para usar cursores personalizados con la clase WinForms Cursor
es que cuando se usa la secuencia, el nombre de archivo y el constructor de recursos sobrecargan el archivo .cur
suministrado debe ser en blanco y negro en color.
Lo que significa que esto no funcionará si los archivos .cur
contienen cualquier color además del blanco y negro.
Cursor myCursor = new Cursor("myCursor.cur");
myControl.Cursor = myCursor;
Hay una manera de evitar esta limitación mediante el uso del controlador de Windows sobrecarga del constructor:
Cree el handle usando las ventanas API:
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern IntPtr LoadCursorFromFile(string fileName);
Luego pásalo al constructor apropiado Cursor
así:
IntPtr handle = LoadCursorFromFile("myCursor.cur");
Cursor myCursor = new Cursor(handle);
myControl.Cursor = myCursor;
Espero que esto evita que otros rascándose la cabeza a un ArgumentException
siendo lanzado diciendo: Image format is not valid. The image file may be corrupted.
cuando se utiliza el otro Cursor
sobrecargas del constructor con un .cur
archivo que contiene el color.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-14 21:47:46
Probé este método. Está bien. Esta es mi solicitud:
[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;
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-25 06:10:46