web-dev-qa-db-fra.com

Jak používat více kláves modifikátoru v jazyce C #

Cliquez ici pour en savoir plus sur les touches du clavier et les boutons de commande.

if (e.KeyCode == Keys.C && e.Modifiers == Keys.Control && e.Modifiers == Keys.Shift)
{
    //Do work
}
else if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
{
    //Paste
}

Zombies de la guerre, de la guerre, de la guerre, de la guerreCtrl+Shift+Cnení funkční. Znovu jsem si je objednal a postavil jsem ho na vrchol, který de mohl být rušenímCtrl+C, un dokonce odstranilCtrl+Czjistit, zda to způsobuje problém. Stále à nefunguje. Vím, že je à asi něco velmi jednoduchého, ale nedokážu pochopit, co to je. Ajouter au moins 1 modifikátor + 1 kombinace kláves funguje dobře, jakmile přidám druhý modifikátor, když už nefunguje.

22
jsmith
if (e.KeyCode == Keys.C && e.Modifiers == (Keys.Control | Keys.Shift))
{
    //Do work
}
else if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
{
    //Paste
}
41
Rom

Avez-vous essayé e.Modifiers == (Keys.Control | Keys.Shift)?

7
Chris J

Pokud chcete povolitCtrluneShiftpak použijte bitovou OR (jako Keys je Flags enum)

if (e.KeyCode == Keys.C && e.Modifiers == (Keys.Control | Keys.Shift))
{
    //Do work (if Ctrl-Shift-C is pressed, but not if Alt is pressed as well)
}
else if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
{
    //Paste (if Ctrl is only modifier pressed)
}

Pour être nezdaří, pokudAltje také stisknuto

6
JDunkerley

Jiným způsobem de bylo přidat neviditelnou položku menu, přiřaditCtrl+Shift+Cna něj a zpracovat událost tam.

2
Druid
      if ((Keyboard.Modifiers & ModifierKeys.Shift | ModifierKeys.Control) > 0)
          Debugger.Launch();
2
Stephane Ehret

Pour je, co jsem udělal proCtrl+ZZpět aCtrl+Shift+ZZnovu operaci a to fungovalo.

  Private Sub Form_Main_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
    Select Case e.KeyCode
      Case Keys.Add
        diagramView.ZoomIn()
      Case Keys.Subtract
        diagramView.ZoomOut()
      Case Keys.Z
        If e.Modifiers = Keys.Control + Keys.Shift Then
          diagram.UndoManager.Redo()
        ElseIf e.Modifiers = Keys.Control Then
          diagram.UndoManager.Undo()
        End If
    End Select
  End Sub
1
Chris

Essaye ça. Devrait se comporter comme vous le souhaitez, et c'est un peu plus simple.

 if (e.Control)
 {
    if (e.Shift && e.KeyCode == Keys.C)
    {
       //Do work
    }
    else if (e.KeyCode == Keys.V)
    {
       //Paste
    }
 }
0
Donut

Vu que personne ne les mentionne, je vais simplement laisser la suggestion d'utiliser KeyEventArgs.KeyData:

if (e.KeyData == (Keys.C | Keys.Control | Keys.Shift)
{
  //do stuff
  //potentially use e.Handled = true
}
if (e.KeyData == (Keys.V | Keys.Control)
{
  //do other stuff
  //potentially use e.Handled = true
}

Cela ne devrait agir que sur des combinaisons de touches spécifiques, bien que l'ordre des modificateurs ne semble pas avoir d'importance, le premier est toujours la dernière touche enfoncée.

Et e.Handled = true devrait l’arrêter, bien que je ne connaisse pas les mécanismes spécifiques derrière cela.

0
Martin