Dela via


Så här kontrollerar du tryck på modifieringstangenter (Windows Forms .NET)

När användaren skriver in tangenter i ditt program kan du övervaka nedtryckta modifieringstangenter som till exempel SHIFT, ALToch CTRL. När en modifierarnyckel trycks in i kombination med andra nycklar eller till och med en musklickning kan programmet svara på rätt sätt. Om du till exempel trycker på tangenten S kan ett "s" visas på skärmen. Om nycklarna CTRL+S trycks ned kan det aktuella dokumentet sparas i stället.

Om du hanterar händelsen KeyDown anger den egenskap KeyEventArgs.Modifiers som tas emot av händelsehanteraren vilka modifikatortangenter som trycks in. Också, egenskapen KeyEventArgs.KeyData anger det tecken som trycktes ned tillsammans med eventuella modifierartangenter i kombination med en bitvis operation OR.

Om du hanterar den KeyPress händelsen eller en mushändelse får händelsehanteraren inte den här informationen. Använd egenskapen ModifierKeys för klassen Control för att identifiera en nyckelmodifierare. I båda fallen måste du utföra ett bitvis OCH av lämpligt Keys värde och det värde som du testar. Den Keys uppräkningen erbjuder varianter av varje modifierartangent, så det är viktigt att du gör en bitvis OCH-kontroll med rätt värde.

Till exempel representeras SKIFT--nyckeln av följande nyckelvärden:

Rätt värde för att testa SHIFT- som en modifierarnyckel är Keys.Shift. Om du vill testa för CTRL- och ALT- som modifierare bör du använda värdena för Keys.Control respektive Keys.Alt.

Identifiera modifierarnyckel

Avgör om en modifieringsnyckel trycks in genom att jämföra ModifierKeys-egenskapen och Keys-uppräkningsvärdet med en bitvis OCH-operation.

I följande kodexempel visas hur du avgör om SKIFT--tangenten trycks ned i KeyPress och KeyDown händelsehanterare.

// Event only raised when non-modifier key is pressed
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        MessageBox.Show("KeyPress " + Keys.Shift);
}

// Event raised as soon as shift is pressed
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        MessageBox.Show("KeyDown " + Keys.Shift);
}
' Event only raised when non-modifier key is pressed
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs)
    If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
        MessageBox.Show("KeyPress " & [Enum].GetName(GetType(Keys), Keys.Shift))
    End If
End Sub

' Event raised as soon as shift is pressed
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs)
    If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
        MessageBox.Show("KeyPress " & [Enum].GetName(GetType(Keys), Keys.Shift))
    End If
End Sub

Se även