Control, Shift, Alt düğmelerinin basılı olup olmadığına erişmem gerektiğinde kullanabileceğim bazı global yapılar var mı? Örneğin MouseDowna TreeView.
Öyleyse nasıl?
Control, Shift, Alt düğmelerinin basılı olup olmadığına erişmem gerektiğinde kullanabileceğim bazı global yapılar var mı? Örneğin MouseDowna TreeView.
Öyleyse nasıl?
Yanıtlar:
Sınıfı kullanın Keyboard. Keyboard.IsKeyDownTuşunu kullanarak Control, Shift, Alt tuşlarının basılı olup olmadığını kontrol edebilirsiniz.
Shift için:
if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
{ /* Your code */ }
Kontrol için:
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{ /* Your code */ }
Alt için:
if (Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
{ /* Your code */ }
Ayrıca:
// Have to get this value before opening a dialog, or user will have released the control key
if ((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
{
}
Keyboard.Modifiers == ModifierKeys.Shiftifadeyi kullanın . Shift tuşunu yakalamak istiyorsanız, ancak aynı anda diğer değiştiricilere basıldığında umursamıyorsanız, (Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shiftveya daha iyi HasFlag sözdizimini kullanınKeyboard.Modifiers.HasFlag(ModifierKeys.Shift)
WIN+RightArrow.
Keyboard.Modifiersolarak gösterirNone
private bool IsShiftKey { get; set; }
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
IsShiftKey = Keyboard.Modifiers == ModifierKeys.Shift ? true : false;
if ((Key.Oem3 == e.Key || ((IsShiftKey && Key.Oem4 == e.Key) || (IsShiftKey && Key.Oem6 == e.Key) || (IsShiftKey && Key.Oem5 == e.Key)) && (validatorDefn as FormatValidatorDefinition).format == "packedascii"))
{
e.Handled = true;
}
}
Bu şekilde idare ediyorum (PreviewKeyDown kullanarak), diyelim ki Alt + R ...
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt)
&& e.SystemKey == Key.R)
{
//do whatever
}
}
Belki birileri neden sadece e.Key değil e.SystemKey kullanmak zorunda olduğumu temizleyebilir, belki de değiştiriciden dolayı? ancak değiştirici + anahtar ararken bu benim için kusursuz bir şekilde çalıştı.
Kısmen @Josh'tan borçlanma ve bir şekilde @ Kruşik'e benzer ve ayrıca KeyEventArgs.systemKey ve KeyEventArgs.Key arasındaki fark hakkında bir soruya atıfta bulunma (Josh'un SystemKey'i neden kullanması gerektiğini cevaplama); buradaki değiştirici tuşlarla (Alt gibi), e.Key Key.System öğesini döndürür ve bu nedenle 'gerçek' anahtar e.SystemKey içinde olur.
Bunun bir yolu, önce 'gerçek' anahtarı getirmektir ve sonra koşullu yapmaktır:
private void OnPreviewKeyDown(object sender, KeyEventArgs e)
{
// Fetch the real key.
var key = e.Key == Key.System ? e.SystemKey : e.Key;
if ((Keyboard.IsKeyDown(Key.LeftAlt) || Keyboard.IsKeyDown(Key.RightAlt))
&& key == Key.Return)
{
// Execute your code.
}
}
(e.Key == Key.F && e.KeyboardDevice.Modifiers == ModifierKeys.Control)tüm diğer şeyleri yerine kontrol edebilirsiniz ...