Entwickler-Ecke

Basistechnologien - Tastaturkombis


Max064 - Mo 26.07.10 09:28
Titel: Tastaturkombis
Hi,

ich verwende folgenden Event Handler:


C#-Quelltext
1:
2:
3:
protected override bool ProcessCmdKey(ref Message tMessage, Keys e)
{
}


Ich möchte bei einer Tastenkombi mit Strg+Z eine Funktion ausführen. Nach Z kann ich abfragen mit:


C#-Quelltext
1:
2:
3:
if (e==Keys.Z)
{
}


Ich kann nur leider nicht nach Strg abfragen! Weder mit e==Keys.Control noch mit e==Keys.ControlKey! Aber ich denke das würde mir für die Tastenkombi eh nicht weiterhelfen, da das Event ja nur durch einen der beiden Keys aufgerufen wird.

Also wie kann ich abrufen, ob Strg gedrückt ist?

lg Max


Trashkid2000 - Mo 26.07.10 10:13

Hi Max,

ja, das Problem ist, dass "e" halt auch mehrere Keys enthalten kann.
Da ist es mit dem Vergleich nicht immer einfach.

Der Vergleich für die Tastenkombination sieht dann wie folgt aus:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
protected override bool ProcessCmdKey(ref Message tMessage, Keys e)
{
  if ((e & Keys.Control) == Keys.Control &&
      (e & Keys.Z) == Keys.Z)
  {
    //tu hier etwas, wenn die Tastenkombination gedrückt wurde
    return true//Event wird nicht weitergeschickt, also wird das Standard-Rückgängig nicht ausgeführt 
                 //Wenn die Form CTRL+Z behadeln soll, dann return true;
  }
  return false//Event wird weitergeschickt
}


LG, Marko


Max064 - Mo 26.07.10 10:39

Hi,

vielen Dank erstmal! Funktioniert super!

Irgendwann habe ich auch verstanden, wie die Abfrage funtkioniert ;-):

Du ziehst mit e & Keys.Control nur die Info von Strg aus dem e?!


Trashkid2000 - Mo 26.07.10 11:03

Schön, dass es Dir geholfen hat.

Nicht so einfach zu erklären, das Ganze.
Das Ganze kommt daher, weil der Enum "Keys" als BitFlags definiert ist.

Um also zu ermitteln, ob ein bestimmter Key in "e" ist, muss eine bitweise UND-Operation durchgeführt werden.

Das Ganze auch zum nachlesen in der MSDN.
http://msdn.microsoft.com/de-de/library/cc138362.aspx

LG, Marko