it-swarm.com.de

Wie kann der Mauszeiger beim Arbeiten mit Windows Forms-Anwendungen in einen benutzerdefinierten geändert werden?

In einer UserControl möchte ich den Mauszeiger vom Pfeil in ein Handsymbol ändern.
Was ich momentan mache ist folgendes:

this.Cursor = Cursors.Hand;

Das ist sehr schön, es gibt mir einen Mauszeiger, der so aussieht:

enter image description here

Aber hier kommt mein Problem ... das zeigt eine Hand mit einem Zeigefinger.
.__ Was ich brauche, ist eine "packende" Hand, eher wie diese:

enter image description here

Wie mache ich das ?, Wie kann ich eine Symboldatei (.ico), eine Cursordatei (.cur) oder eine Bilddatei (.png) laden und als Mauszeiger verwenden? 

37
Bart Gijssens

Wenn Sie eine Cursordatei haben:

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

ansonsten müssen Sie einen erstellen:

weitere Informationen zu benutzerdefinierten Cursors

19
fixagon

Haben Sie System.Windows.Forms.Cursor curs = new System.Windows.Forms.Cursor(file_name); ausprobiert?

2
Djole

Ein Nachteil bei der Verwendung benutzerdefinierter Cursor mit der WinForms-Klasse Cursor ist, dass bei Verwendung von Stream, Dateinamen und Ressourcen-Konstruktor-Überladungen die angegebene .cur-Datei die Farbe black and white aufweisen muss. 

Das bedeutet, dass dies nicht funktioniert, wenn die .cur-Dateien außer Schwarz und Weiß weitere Farben enthalten.

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

Es gibt eine Möglichkeit, diese Einschränkung durch die Überladung des Windows-Handle-Konstruktors zu umgehen:

Erstellen Sie das Handle mithilfe der Windows-API:

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

Dann übergeben Sie es wie folgt an den entsprechenden Cursor-Konstruktor: 

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

Ich hoffe, dass dies verhindert, dass andere ihren Kopf zu einer ArgumentException zerkratzen, die geworfen wird. Sie gibt an: Image format is not valid. The image file may be corrupted., wenn der andere Cursor-Konstruktor mit einer .cur-Datei überladen wird, die Farbe enthält. 

1
Derek W

Ich habe diese Methode getestet. Es ist in Ordnung. Dies ist meine Bewerbung:

    [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;
    }
0
nult2003