Postupy: Určení modifikační klávesy, která byla stisknuta

Když vytvoříte aplikaci, která přijímá stisknutí kláves uživatele, můžete také monitorovat modifikační klávesy, jako jsou klávesy SHIFT, ALT a CTRL. Když je modifikační klávesa stisknutá v kombinaci s jinými klávesami nebo kliknutí myší, aplikace může správně reagovat. Pokud je například písmeno S stisknuto, může to jednoduše způsobit, že se na obrazovce zobrazí znak "s", ale pokud jsou stisknuty klávesy CTRL+S, může být aktuální dokument uložen. Pokud zpracováváte KeyDown událost, Modifiers vlastnost KeyEventArgs přijatá obslužnou rutinou události určuje, které modifikační klávesy jsou stisknuty. Alternativně KeyData vlastnost KeyEventArgs určuje znak, který byl stisknut, a také všechny modifikační klávesy v kombinaci s bitovou or. Pokud ale zpracováváte KeyPress událost nebo událost myši, obslužná rutina události tyto informace neobdrží. V tomto případě musíte použít ModifierKeys vlastnost Control třídy. V obou případech musíte provést bitový operátor 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é provést bitovou hodnotu AND se správnou hodnotou. Například klávesa SHIFT je reprezentována Shiftpomocí , ShiftKeyRShiftKey a LShiftKey správná hodnota test SHIFT jako modifikační klávesa je Shift. Podobně pokud chcete testovat ctrl a ALT jako modifikátory, měli byste použít Control hodnoty a Alt hodnoty.

Poznámka:

Programátoři jazyka Keyboard Visual Basic mají také přístup k klíčovým informacím prostřednictvím vlastnosti.

Určení, která modifikační klávesa byla stisknuta

  • Pomocí bitového AND operátoru ModifierKeys s vlastností a hodnotou výčtu Keys určete, zda je stisknuta konkrétní modifikační klávesa. Následující příklad kódu ukazuje, jak určit, zda je klávesa SHIFT stisknuta v obslužné rutině KeyPress události.

    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
    

Viz také