Condividi tramite


Panoramica dell'uso del mouse (Windows Form .NET)

La ricezione e la gestione dell'input del mouse sono una parte importante di ogni applicazione Windows. È possibile gestire gli eventi del mouse per eseguire un'azione nell'applicazione o usare le informazioni sulla posizione del mouse per eseguire hit testing o altre azioni. Inoltre, è possibile modificare il modo in cui i controlli nell'applicazione gestiscono l'input del mouse. Questo articolo descrive in dettaglio questi eventi del mouse e come ottenere e modificare le impostazioni di sistema per il mouse.

In Windows Forms, l'input dell'utente viene inviato alle applicazioni sotto forma di messaggi di Windows . Una serie di metodi sottoponibili a override elabora questi messaggi a livello di applicazione, modulo e controllo. Quando questi metodi ricevono messaggi del mouse, generano eventi che possono essere gestiti per ottenere informazioni sull'input del mouse. In molti casi, le applicazioni Windows Form possono elaborare tutti gli input dell'utente semplicemente gestendo questi eventi. In altri casi, un'applicazione può effettuare l'override di uno dei metodi che elaborano i messaggi per intercettare uno specifico messaggio prima che venga ricevuto dall'applicazione, dal form o dal controllo.

Eventi del mouse

Tutti i controlli Windows Form ereditano un set di eventi correlati all'input del mouse e della tastiera. Ad esempio, un controllo può gestire l'evento MouseClick per determinare la posizione di un clic del mouse. Per altre informazioni sugli eventi del mouse, vedere Uso degli eventi del mouse.

Posizione del mouse e verifica delle collisioni

Quando l'utente sposta il mouse, il sistema operativo sposta il puntatore del mouse. Il puntatore del mouse contiene un singolo pixel, denominato hot spot, che il sistema operativo tiene traccia e riconosce come posizione del puntatore. Quando l'utente sposta il mouse o preme un pulsante del mouse, il Control che contiene il HotSpot attiva l'evento del mouse appropriato.

È possibile ottenere la posizione corrente del mouse con la proprietà Location del MouseEventArgs quando si gestisce un evento del mouse o utilizzando la proprietà Position della classe Cursor. È quindi possibile usare le informazioni sulla posizione del mouse per eseguire il hit testing e quindi eseguire un'azione in base alla posizione del mouse. La funzionalità di hit testing è incorporata in diversi controlli in Windows Form, ad esempio i controlli ListView, TreeView, MonthCalendar e DataGridView.

Usato con l'evento del mouse appropriato, MouseHover, ad esempio, l'hit testing è molto utile per determinare quando l'applicazione deve eseguire un'azione specifica.

Modifica delle impostazioni di input del mouse

È possibile rilevare e modificare il modo in cui un controllo gestisce l'input del mouse derivando dal controllo e usando i metodi GetStyle e SetStyle. Il metodo SetStyle accetta una combinazione bit per bit di valori ControlStyles per determinare se il controllo avrà un comportamento di clic standard, doppio clic o se il controllo gestirà la propria elaborazione del mouse. Inoltre, la classe SystemInformation include proprietà che descrivono le funzionalità del mouse e specificano come il mouse interagisce con il sistema operativo. Nella tabella seguente vengono riepilogate queste proprietà.

Proprietà Descrizione
DoubleClickSize Ottiene le dimensioni, in pixel, dell'area in cui l'utente deve fare clic due volte affinché il sistema operativo consideri i due clic un doppio clic.
DoubleClickTime Ottiene il numero massimo di millisecondi che possono trascorrere tra un primo clic e un secondo clic affinché l'azione del mouse venga considerata un doppio clic.
MouseButtons Ottiene il numero di pulsanti del mouse.
MouseButtonsSwapped Ottiene un valore che indica se le funzioni dei pulsanti sinistro e destro del mouse sono state scambiate.
MouseHoverSize Ottiene le dimensioni, in pixel, del rettangolo all'interno del quale il puntatore del mouse deve rimanere per il tempo del passaggio del mouse prima che venga generato un messaggio di passaggio del mouse.
MouseHoverTime Ottiene il tempo, espresso in millisecondi, che il puntatore del mouse deve rimanere nel rettangolo di passaggio del mouse prima che venga generato un messaggio al passaggio del mouse.
MousePresent Ottiene un valore che indica se è installato un mouse.
MouseSpeed Ottiene un valore che indica la velocità corrente del mouse, da 1 a 20.
MouseWheelPresent Ottiene un valore che indica se è installato un mouse con una rotellina del mouse.
MouseWheelScrollDelta Ottiene la quantità del valore differenziale dell'incremento di una singola rotazione della rotellina del mouse.
MouseWheelScrollLines Ottiene il numero di righe da scorrere quando la rotellina del mouse viene ruotata.

Metodi che elaborano i messaggi di input dell'utente

I moduli e i controlli hanno accesso all'interfaccia IMessageFilter e a un set di metodi sostituibili che elaborano i messaggi di Windows in punti diversi nella coda dei messaggi. Questi metodi hanno tutti un parametro Message, che incapsula i dettagli di basso livello dei messaggi di Windows. È possibile implementare o eseguire l'override di questi metodi per analizzare il messaggio e quindi consumare il messaggio o passarlo al prossimo consumatore nella coda dei messaggi. Nella tabella seguente vengono illustrati i metodi che elaborano tutti i messaggi di Windows in Windows Form.

Metodo Note
PreFilterMessage Questo metodo intercetta i messaggi di Windows in coda (anche detti postati) a livello di applicazione.
PreProcessMessage Questo metodo intercetta i messaggi di Windows a livello di modulo e di controllo prima dell'elaborazione.
WndProc Questo metodo elabora i messaggi di Windows a livello di modulo e di controllo.
DefWndProc Questo metodo esegue l'elaborazione predefinita dei messaggi di Windows a livello di modulo e controllo. In questo modo viene fornita la funzionalità minima di una finestra.
OnNotifyMessage Questo metodo intercetta i messaggi a livello di modulo e controllo dopo l'elaborazione. Per chiamare questo metodo, è necessario impostare il bit di stile EnableNotifyMessage.

Vedere anche