Dela via


Så här gör du: Avgöra vilken modifierarnyckel som trycktes

När du skapar ett program som accepterar användarens tangenttryckningar kanske du också vill övervaka för modifierarnycklar som SKIFT-, ALT- och CTRL-tangenterna. När en modifierarnyckel trycks in i kombination med andra nycklar, eller med musklickningar, kan programmet svara på rätt sätt. Om bokstaven S till exempel trycks ned kan det leda till att ett "s" visas på skärmen, men om tangenterna CTRL+S trycks ned kan det aktuella dokumentet sparas. Om du hanterar KeyDown-händelsen, anger egenskapen Modifiers hos KeyEventArgs, som tas emot av händelsehanteraren, vilka modifieringsknappar som trycks in. Alternativt anger egenskapen KeyData för KeyEventArgs det tecken som trycktes på samt eventuella modifierarnycklar i kombination med en bitvis OR. Men om du hanterar den KeyPress händelsen eller en mushändelse får händelsehanteraren inte den här informationen. I det här fallet måste du använda egenskapen ModifierKeys för klassen Control. I båda fallen måste du utföra en bitvis OCH av det korrekta Keys-värdet och det testade värdet. Keys enumeration erbjuder varianter av varje modifierartangent, så det är viktigt att du utför en bitvis AND med rätt värde. Skift-nyckeln representeras till exempel av Shift, ShiftKey, RShiftKey och LShiftKey Rätt värde för att testa SKIFT som en modifierarnyckel är Shift. Om du vill testa CTRL och ALT som modifierare bör du använda värdena Control respektive Alt.

Not

Visual Basic-programmerare kan också komma åt viktig information via egenskapen Keyboard

Så här avgör du vilken modifierarnyckel som trycktes på

  • Använd den bitvisa operatorn AND med egenskapen ModifierKeys och värdet i Keys-uppräkningen för att avgöra om en viss modifieringsnyckel trycks in. Följande kodexempel visar hur du avgör om SKIFT-tangenten trycks ned i en KeyPress händelsehanterare.

    private:
        void textBox1_KeyPress(Object^ sender, KeyPressEventArgs^ e)
        {
            if ((Control::ModifierKeys & Keys::Shift) == Keys::Shift)
            {
                MessageBox::Show("Pressed " + Keys::Shift.ToString());
            }
        }
    
    public void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        {
            MessageBox.Show("Pressed " + Keys.Shift);
        }
    }
    
    Public Sub TextBox1_KeyPress(ByVal sender As Object, _
        ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
    
        If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
            MsgBox("Pressed " + Keys.Shift.ToString())
        End If
    End Sub
    

Se även