Postup kontroly modifikačních kláves (Windows Forms .NET)
Když uživatel do aplikace zadá klávesy, můžete monitorovat stisknutí modifikačních kláves, jako je SHIFT, ALTa 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 událost KeyDown, vlastnost KeyEventArgs.Modifiers přijatá obslužnou rutinou události určuje, které modifikační klávesy jsou stisknuty. Vlastnost KeyEventArgs.KeyData také určuje znak, který byl stisknut spolu s libovolnými modifikačními klávesami v kombinaci s bitovou sadou OR.
Pokud zpracováváte událost KeyPress nebo událost myši, obslužná rutina tyto informace neobdrží. Pomocí vlastnosti ModifierKeys třídy Control detekujte modifikátor klíče. V obou případech musíte provést bitovou operaci AND s odpovídající hodnotou Keys a hodnotou, kterou testujete. Výčet Keys nabízí varianty každého modifikačního klíče, takže je důležité provést 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ávesou je Keys.Shift. Podobně pokud chcete testovat ctrl a ALT jako modifikátory, měli byste použít hodnoty Keys.Control a Keys.Alt.
Detekce modifikačního klíče
Zjistit, zda je modifikační klávesa stisknuta porovnáním vlastnosti ModifierKeys s hodnotou výčtu Keys pomocí bitového operátoru and.
Následující příklad kódu ukazuje, jak určit, zda je stisknuta klávesa SHIFT v rámci obslužníků událostí KeyPress a 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é
.NET Desktop feedback