Apakah ada beberapa konstruksi global yang dapat saya gunakan setiap kali saya perlu mengakses apakah tombol Control, Shift, Alt sedang down? Misalnya di dalam MouseDown
acara a TreeView
.
Kalau begitu bagaimana?
Gunakan kelas Keyboard
. Menggunakan Keyboard.IsKeyDown
Anda dapat memeriksa apakah Control, Shift, Alt turun sekarang.
Untuk Shift:
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{ /* Your code */ }
Untuk Kontrol:
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ /* Your code */ }
Untuk Alt:
if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
{ /* Your code */ }
Ada juga:
// Have to get this value before opening a dialog, or user will have released the control key
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
}
(e.Key == Key.F && e.KeyboardDevice.Modifiers == ModifierKeys.Control)
alih - alih semua hal lainnya ...Keyboard.Modifiers == ModifierKeys.Shift
pernyataan. Jika Anda ingin menangkap tombol shift tetapi tidak peduli apakah pengubah lain ditekan pada saat yang sama, gunakan(Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift
sintaks HasFlag atau yang jauh lebih baikKeyboard.Modifiers.HasFlag(ModifierKeys.Shift)
WIN+RightArrow
.Keyboard.Modifiers
tampil sebagaiNone
sumber
Ini adalah bagaimana saya menanganinya (menggunakan PreviewKeyDown), katakanlah kita mencari Alt + R ...
Mungkin seseorang dapat menjelaskan mengapa saya harus menggunakan e.SystemKey dan bukan hanya e.Key, mungkin karena pengubahnya? tapi ini berhasil bagi saya ketika mencari kunci pengubah +.
sumber
dan juga:
jika My.Computer.Keyboard.ShiftKeyDown maka ...
My.Computer.Keyboard.CtrlKeyDown
My.Computer.Keyboard.AltKeyDown
sumber
Sebagian meminjam dari @Josh, dan agak mirip dengan @Krushik, dan juga merujuk pertanyaan tentang Perbedaan antara KeyEventArgs.systemKey dan KeyEventArgs.Key (menjawab mengapa Josh harus menggunakan SystemKey); di mana, dengan kunci pengubah (seperti Alt), e.Key mengembalikan Key.System, dan dengan demikian kunci 'asli' ada dalam e.SystemKey.
Cara untuk mengatasi ini, adalah dengan terlebih dahulu mengambil kunci 'asli', dan kemudian lakukan kondisional Anda:
sumber