Mushändelser i Windows-formulär
När du hanterar musindata vill du vanligtvis veta platsen för muspekaren och musknapparnas tillstånd. Det här avsnittet innehåller information om hur du hämtar den här informationen från mushändelser och förklarar i vilken ordning musklickshändelser genereras i Windows Forms-kontroller. En lista och en beskrivning av alla mushändelser finns i How Mouse Input Works in Windows Forms. Se även Översikt över händelsehanterare (Windows Forms) och Events Overview (Windows Forms).
Musinformation
En MouseEventArgs skickas till hanterare av mushändelser relaterade till att klicka på en musknapp och spåra musrörelser. MouseEventArgs innehåller information om musens aktuella tillstånd, inklusive muspekarens plats i klientkoordinaterna, vilka musknappar som trycks ned och om mushjulet har rullat. Flera mushändelser, till exempel de som bara meddelar när muspekaren har angett eller lämnat gränserna för en kontroll, skickar en EventArgs till händelsehanteraren utan ytterligare information.
Om du vill veta musknapparnas aktuella tillstånd eller muspekarens plats och du vill undvika att hantera en mushändelse kan du också använda egenskaperna MouseButtons och MousePosition för klassen Control. MouseButtons returnerar information om vilka musknappar som för närvarande trycks in. MousePosition returnerar skärmkoordinaterna för muspekaren och motsvarar värdet som returneras av Position.
Konvertera mellan skärm- och klientkoordinater
Eftersom viss information om musplats finns i klientkoordinater och vissa finns i skärmkoordinater kan du behöva konvertera en punkt från ett koordinatsystem till ett annat. Du kan enkelt göra detta med hjälp av de PointToClient- och PointToScreen metoder som är tillgängliga i klassen Control.
Beteende vid standardklickhändelse
Om du vill hantera musklickshändelser i rätt ordning måste du känna till i vilken ordning klickhändelser genereras i Windows Forms-kontroller. Alla Windows Forms-kontroller genererar klickhändelser i samma ordning när en musknapp trycks ned och släpps (oavsett vilken musknapp), förutom där anges i följande lista för enskilda kontroller. I följande lista visas ordningen på händelser som genererats för ett enda musklick:
MouseDown händelse.
Click händelse.
MouseClick händelse.
MouseUp händelse.
Följande är ordningen på händelser som genereras för en dubbel musklickning:
MouseDown händelse.
Click händelse.
MouseClick händelse.
MouseUp händelse.
MouseDown händelse.
DoubleClick händelse. (Detta kan variera beroende på om kontrollen i fråga har StandardDoubleClick formatbit inställd på
true
. Mer information om hur du anger en ControlStyles bit finns i metoden SetStyle.)MouseDoubleClick händelse.
MouseUp händelse.
Ett kodexempel som visar ordningen på musklickshändelser finns i How to: Handle User Input Events in Windows Forms Controls.
Enskilda kontroller
Följande kontroller överensstämmer inte med standardbeteendet för musklickshändelsen:
-
Obs
För den ComboBox kontrollen inträffar händelsebeteendet som beskrivs senare om användaren klickar på redigeringsfältet, knappen eller på ett objekt i listan.
Vänsterklick: Click, MouseClick
Högerklicka: Inga klickhändelser har genererats
Vänster dubbelklicka: Click, MouseClick; Click, MouseClick
Dubbelklicka med höger musknapp: Inga klickhändelser registrerades
TextBox, RichTextBox, ListBox, MaskedTextBoxoch CheckedListBox kontroller
Not
Händelsebeteendet som beskrivs senare inträffar när användaren klickar var som helst i dessa kontroller.
Vänsterklick: Click, MouseClick
Högerklicka: Inga klickhändelser genererades
Vänster dubbelklicka: Click, MouseClick, DoubleClick, MouseDoubleClick
Höger dubbelklick: Ingen klickhändelse utlöses
ListView kontroll
Not
Händelsebeteendet som beskrivs senare inträffar bara när användaren klickar på objekten i ListView-kontrollen. Inga händelser aktiveras för klick någon annanstans på kontrollen. Förutom de händelser som beskrivs senare finns det BeforeLabelEdit och AfterLabelEdit händelser, vilket kan vara av intresse för dig om du vill använda validering med ListView kontroll.
Vänsterklick: Click, MouseClick
Högerklicka: Click, MouseClick
Vänster dubbelklicka: Click, MouseClick; DoubleClick, MouseDoubleClick
Höger dubbelklicka: Click, MouseClick; DoubleClick, MouseDoubleClick
TreeView kontroll
Not
Händelsebeteendet som beskrivs senare inträffar bara när användaren klickar på själva objekten eller till höger om objekten i TreeView-kontrollen. Inga händelser aktiveras för klick någon annanstans på kontrollen. Förutom de som beskrivs senare finns det BeforeCheck, BeforeSelect, BeforeLabelEdit, AfterSelect, AfterCheckoch AfterLabelEdit händelser, vilket kan vara av intresse för dig om du vill använda validering med kontrollen TreeView.
Vänsterklick: Click, MouseClick
Högerklicka: Click, MouseClick
Vänster dubbelklicka: Click, MouseClick; DoubleClick, MouseDoubleClick
Dubbelhögerklicka: Click, MouseClick; DoubleClick, MouseDoubleClick
Målningsbeteende hos växlingskontroller
Växlingskontroller, såsom de kontroller som härstammar från ButtonBase-klassen, har följande distinkta renderingsbeteende vid kombination med musklikks-händelser:
Användaren trycker på musknappen.
Kontroll visas i tryckt läge.
Händelsen MouseDown aktiveras.
Användaren släpper musknappen.
Kontrollen målas i ett upphöjt läge.
Händelsen Click aktiveras.
Händelsen MouseClick aktiveras.
Händelsen MouseUp aktiveras.
Notis
Om användaren flyttar pekaren från växlingskontrollen medan musknappen är nere (till exempel att flytta musen från Button kontroll medan den trycks ned) kommer växlingskontrollen att målas i upphöjt tillstånd och endast den MouseUp händelsen inträffar. Händelserna Click eller MouseClick inträffar inte i den här situationen.
Se även
.NET Desktop feedback