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:
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) { return true; } return false; } |
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
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!