web-dev-qa-db-fra.com

Comment capturer Ctrl + Tab et Ctrl + Maj + Tab dans WPF?

Quel serait un exemple de code qui va piéger le Ctrl+Tab et Ctrl+Shift+Tab pour une application WPF?

Nous avons créé des événements KeyDown et avons également essayé d'ajouter des liaisons de commandes avec des gestes d'entrée, mais nous n'avons jamais pu intercepter ces deux raccourcis.

64
FarrEver

Quel gestionnaire KeyDown aviez-vous? Le code ci-dessous fonctionne pour moi. Celui qui me pose problème est: Alt + Tab, mais vous ne l'avez pas demandé: D

public Window1()
{
   InitializeComponent();
   AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)HandleKeyDownEvent);
}

private void HandleKeyDownEvent(object sender, KeyEventArgs e)
{
   if (e.Key == Key.Tab && (Keyboard.Modifiers & (ModifierKeys.Control | ModifierKeys.Shift)) == (ModifierKeys.Control | ModifierKeys.Shift))
   {
      MessageBox.Show("CTRL + SHIFT + TAB trapped");
   }

   if (e.Key == Key.Tab && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control)
   {
      MessageBox.Show("CTRL + TAB trapped");
   }
}
92
Szymon Rozga

La réponse de Gustavo était exactement ce que je cherchais. Nous voulons valider les clés de saisie, mais autorisons toujours le collage:

protected override void OnPreviewKeyDown(KeyEventArgs e)
{
   if ((e.Key == Key.V || e.Key == Key.X || e.Key == Key.C) && Keyboard.IsKeyDown(Key.LeftCtrl))
      return;
}
31
mikeB

Vous devez utiliser KeyUp événement, pas KeyDown...

8
Gus Cavalcanti

Version de travail de Szymon Rozga réponse (désolé, je ne peux pas commenter). Nous ne regardons pas sur Alt, mais sa comptabilité peut être simplement ajoutée au début si

  public View()
  {
     InitializeComponent();
     AddHandler(Keyboard.PreviewKeyDownEvent, (KeyEventHandler)controlKeyDownEvent);
  }

  private void controlKeyDownEvent(object sender, KeyEventArgs e)
  {
     if (e.Key == Key.Tab && Keyboard.Modifiers.HasFlag(ModifierKeys.Control))
     {
        if (Keyboard.Modifiers.HasFlag(ModifierKeys.Shift))
           MessageBox.Show("CTRL + SHIFT + TAB trapped");
        else
           MessageBox.Show("CTRL + TAB trapped");
     }
  }
2
Lev

Salut, vous pouvez l'utiliser lors de l'événement keydown

 private void OnButtonKeyDown(object sender, KeyEventArgs e)
    {
        if(Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.Tab) && Keyboard.IsKeyDown(Key.LeftShift))
        {
           //
           // TODO: somthing here
           //
        }
    }
1
luka