2014-12-15 13 views
8

In einer C# -Windows-Anwendung gibt es zwei verschiedene Mausereignisse, MouseEnter und MouseHover, die beide ausgelöst werden, wenn sich der Cursor über dem Objekt befindet.Was ist der Unterschied zwischen Mauszeiger und Mauszeiger?

Was ist der Unterschied zwischen ihnen?

+1

Ich denke, Maus Hover ist, wenn die Maus ein wenig Zeit über das Ziel verbringt, denke Tooltips – PaulG

+16

Dies ist eine * sehr * googlable Frage. –

+1

Das sind __strange__ Stimmen zählen sowohl auf die wertlose Frage als auch auf die Antworten! – TaW

Antwort

25

Sie sind in Windows Forms Unter der Annahme:

Maus Geben Sie tritt auf:

Tritt ein, wenn der Mauszeiger die Kontrolle ins Spiel kommt.

(MSDN)

Maus Hover:

Tritt auf, wenn der Mauszeiger auf der Steuer aufliegt.

Eine typische Verwendung von MouseHover ist eine Werkzeugspitze, wenn die Maus zum Anzeigen innerhalb eines bestimmten Bereichs auf eine Steuer pausiert um das Steuerelement (das „Hover Rechteck“). Die für dieses Ereignis erforderliche Pause ist in Millisekunden von der MouseHoverTime-Eigenschaft angegeben.

(MSDN)

So stellen MouseHoverTime global (nicht empfohlen, siehe @ IronMan84 den Link here für eine bessere Lösung), können Sie die SystemParametersInfo-Funktion verwenden. Da eine Win32-API-Aufruf das ist, werden Sie PInvoke brauchen:

[DllImport("user32.dll", SetLastError = true)] 
[return: MarshalAs(UnmanagedType.Bool)] 
static extern bool SystemParametersInfo(SPI uiAction, uint uiParam, IntPtr pvParam, SPIF fWinIni); 

Genannt als:

SystemParametersInfo(SPI.SPI_SETMOUSEHOVERTIME, 
        desiredHoverTimeInMs, 
        null, 
        SPIF.SPIF_SENDCHANGE); 

Sigantures von PInvoke.NET: SystemParametersInfo, SPIF (Enum), SPI (Enum)

ich nicht enthalten Die Enum Unterschriften hier, weil sie so verdammt lang sind. Verwenden Sie einfach die auf PInvoke.Net (oben verknüpft)

Weitere Informationen zum Aufruf der SystemParametersInfo-API und ihrer Parameter finden Sie unter MSDN.

+0

und wie Sie die MouseHoverTime-Eigenschaft festlegen? – Zahema

+0

@IbrahimHero Es gibt mehrere Möglichkeiten. IronMan's Link ist was ich auch gefunden habe. Es scheint auch, dass Sie einen Registrierungsschlüssel ändern können, um es systemweit festzulegen. Im Allgemeinen sollten Sie diesen Wert nicht ändern. Googlen "Set MouseHoverTime" gibt die relevanten Seiten an. – BradleyDotNET

+0

Ich weiß, dass ich dumm bin und alle, außer IronMan's Link, waren nicht sehr nützlich für mich ... könntest du ein direktes Beispiel dafür haben, wie man es einstellt? – Zahema

11

MouseEnter ist, wenn Ihre Maus gerade in die Gegend geht.

MouseHover ist, wenn Ihre Maus für ein wenig dort bleibt (normalerweise für Tooltips verwendet).

Soweit Mausereignisse gehen, tritt das MouseEnter Ereignis vor allen anderen auf. Sie können auch manuell festlegen, wie lange die Maus über den Bereich bewegt werden muss, bevor das Ereignis MouseHover ausgelöst wird. Sie können mehr darüber sehen here.

EDIT: Ich habe den Link bei der Anpassung von MouseHoverTime geändert. Es stellt sich heraus, dass Sie es nicht leicht machen können, und dass es sehr zu empfehlen ist, dies nicht zu tun, da es sich um einen Systemwert handelt, der alle Anwendungen auf dem Computer betrifft. Stattdessen zeigt der neue Link, wie Sie eine neue, anwendungsspezifische Variable manuell dazu verwenden können.

+0

wie man es manuell einstellt? - Der Link war nicht so nützlich - – Zahema

+1

Nur damit Sie wissen, ich habe Ihren Link als "richtigen" Weg geliehen, um 'MouseHoverTime' zu ​​setzen, da das OP auf einem anderen Ansatz besteht. Ich würde deinen Weg benutzen :) – BradleyDotNET

+0

verstehe ich voll und ganz. Danke für den Ruf. – IronMan84