Sdílet prostřednictvím


Jak zkontrolovat modifikační klávesy (model Windows Forms .NET)

Když uživatel do aplikace zadá klávesy, můžete monitorovat stisknutí modifikačních kláves, jako je SHIFT, ALT a CTRL. Když se modifikační klávesa stiskne v kombinaci s jinými klávesami nebo dokonce kliknutím myší, aplikace může správně reagovat. Například stisknutí klávesy S může způsobit zobrazení "s" na obrazovce. Pokud jsou klávesy CTRL+S stisknuty, může být aktuální dokument uložen.

Pokud zpracováváte KeyDown událost, KeyEventArgs.Modifiers vlastnost přijatá obslužnou rutinou události určuje, které modifikační klávesy jsou stisknuty. Vlastnost také určuje znak, KeyEventArgs.KeyData který byl stisknut spolu s libovolnými modifikačními klávesami v kombinaci s bitovou or.

Pokud zpracováváte KeyPress událost nebo událost myši, obslužná rutina události tyto informace neobdrží. ModifierKeys Pomocí vlastnosti Control třídy detekujte modifikátor klíče. V obou případech musíte provést bitovou hodnotu AND odpovídající Keys hodnoty a hodnotu, kterou testujete. Výčet Keys nabízí varianty každého modifikačního klíče, takže je důležité, abyste udělali bitovou kontrolu AND se správnou hodnotou.

Například klávesa SHIFT je reprezentována následujícími hodnotami klíče:

Správná hodnota pro otestování shift jako modifikační klávesy je Keys.Shift. Podobně pokud chcete testovat ctrl a ALT jako modifikátory, měli byste použít Keys.Control hodnoty a Keys.Alt hodnoty.

Detekce modifikačního klíče

Zjistí, jestli je modifikační klávesa stisknuta porovnáním ModifierKeys vlastnosti a hodnoty výčtu Keys s bitovým operátorem AND.

Následující příklad kódu ukazuje, jak určit, zda je klávesa SHIFT stisknuta v obslužných KeyPress rutinách událostí KeyDown .

// 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

Viz také