Autor Beitrag
Max064
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Mo 26.07.10 09:28 
Hi,

ich verwende folgenden Event Handler:

ausblenden 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: 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:

ausblenden 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

Für diesen Beitrag haben gedankt: Max064
Max064 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: 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.
msdn.microsoft.com/d...ibrary/cc138362.aspx

LG, Marko