Domanda

Ho un'applicazione che apre un modulo modale con il metodo ShowDialog. Una volta visualizzato questo modulo, voglio catturare il movimento del mouse anche se il cursore si trova all'esterno del modulo. Come posso catturare il movimento del mouse? Ho visto qualcosa con la proprietà Capture ma non riesco a farlo funzionare.

[modifica]

Voglio essere avvisato se il mouse si sposta all'esterno del modulo.

È stato utile?

Soluzione

La proprietà Capture è il modo corretto, ma ci sono alcune limitazioni.

  • Solo la finestra in primo piano può catturare il mouse
  • L'acquisizione del mouse può essere disabilitata da altre parti del sistema
  • La funzione API Win32 SetCapture viene reimpostata ogni volta che un "mouse su " si verifica un evento. Presumo che valga anche per .NET.

Vedi la sezione osservazioni della proprietà Capture .

Quando il mouse viene catturato, riceverai i soliti eventi ma con un intervallo di coordinate del mouse più ampio (ad esempio una posizione X negativa, se il mouse rimane del controllo di acquisizione)

L'acquisizione del mouse è fragile, a causa della sua natura globale. Controlla se ci sono altri modi per gestire determinati eventi. Forse gli eventi MouseLeave o MouseEnter sono sufficienti nel tuo caso.

Altri suggerimenti

Puoi semplicemente usare la proprietà statica Control.MousePosition .

Puoi leggere la posizione del cursore, usando la proprietà Cursor.Position, vedi Cursor.Position

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top