Hallo,
kann mir jemand sagen, wie ich bei einer TextBox im KeyDown Event auswerten kann, ob die Taste **AltGr + eine weitere Taste z.B. F1 gleichzeitig gedrückt **wurden.
if (e.KeyData == (Keys.LButton | Keys.ShiftKey | Keys.Control))
liefert mir die AltGr Taste, aber wie komme ich an die Zusatztaste ran, um dies auszuwerten.
Habs auch schon mit
if (e.KeyData == (Keys.LButton | Keys.ShiftKey | Keys.Control | Keys.F1))
versucht, aber das klappt leider auch nicht.
Bin für jede hilfe dankbar.
beim Keydown gib mal das mit ner messagebox aus
e.KeyData.ToString()
und das vergleichst mit .equals mit dem string
Fertig!
Unsere Website
iPhone Programmierung | Android Programmierung
Danke für die schnelle Antwort.
Wenn ich AltGr + F1 drücke liefert die MessageBox "ControlKey, Control". F1 wird dabei überhaupt nicht ausgewertet. Für jede Taste wird ja auch ein eigener KeyDown Event aufgerufen.
MessageBox.Show(e.KeyData.ToString());
Es muss doch eine Möglichkeit geben, beides gleichzeitig auszuwerten. Irgendwas mach ich da noch falsch. Alt + F1 lässt sich ja auch problemlos überprüfen mit
e.KeyValue && e.Alt
Schau mal hier, evtl. hilft dir das ja.
Gruß David
Nein, das bringt mich leider nicht weiter.
Ich brauche eine Kombination aus Funktionstaste (F1-F12) und AltGr.
Bin für jeden weiteren Tip dankbar.
'AltGr' entspricht 'Ctrl+Alt', so daß du mal
if(e.Control && e.Alt && e.KeyCode == Keys.F1)
{
}
probieren solltest.
P.S: Anstatt MessageBox lieber eine Trace-Meldung ausgeben, da eine MessageBox ja alle weiteren Tasten blockiert...
Hallo Th69,
vielen Dank. Funktioniert... Ich hatte was ähnliches probiert und es ging nicht, aber das ist es jetzt. MERCI....
Hi!
Die Keys-Enumeration ist super-logisch aufgebaut, man muß nur wissen, wie:
Es gibt ein (short, int16) Low-Word und ein HighWord. Im LowWord ist der KeyCode. Im HighWord die Modifier.
Also die Taste [Alt][Ctr][Z] ist dargestellt mit
Keys.Alt | Keys.Control | Keys.Alt
Die Modifiers selbst stellen sich dar, indem man mit &xFFFF0000 maskiert (sei Key ein vollständiger TastenCode, also incl Modifiers)
int Modifiers = Key & 0xFFFF0000;
Für die Maskierung existieren sogar Konstanten in der Keys-Enumeration
(Keys.Modifiers = 0xffff0000)
int Modifiers = Key & Keys.Modifiers;
(Keys.KeyCode = 0xffff)
int keyCode = Key & Keys.KeyCode;
Bitshift der Modifier-Codes ist auch interessant:
(Keys.Shift >> 16 == 1)
(Keys.Control >> 16 == 2)
(Keys.Alt >> 16 == 4)
Aber geht natürlich auch wie Th69 arbeitet, denn die KeyEventArgs haben das enthaltene .KeyData schon finxnfertig aufgearbeitet in die 4 Member
bool .Shift
bool .Control
bool .Alt
int KeyCode
Der frühe Apfel fängt den Wurm.
Hallo ErfinderDesRades,
mit dem >> Operator hab ich noch gar nicht gearbeitet.
Ich hab hier eine Datenbank, in der Tastaturkombinationen sind, die noch aus VB eingelesen wurden. Der Bitshift Code entspricht genau dem shift Wert aus VB im KeyDown. Ich muss mal schauen, wie ich in C# an diesen Wert herankomme. So könnte ich die Werte aus der Datenbank direkt auswerten. Meine Lösung ist noch nicht so schön. Das hilft mir schon mal sehr weiter.
Danke für die Hilfe....
Der Bitshift Code entspricht genau dem shift Wert aus VB im KeyDown. Ich muss mal schauen, wie ich in C# an diesen Wert herankomme.
Na, andersrum shiften
Keys modifier = (Keys)(vbModifierValue << 16)
Edit: wahrscheinlich musste den vbModifier nach int vergrößern, ist alles ungetestet
Keys modifier = (Keys)((ctype(vbModifierValue, int)) << 16)
Der frühe Apfel fängt den Wurm.
Hallo,
funktioniert jetzt und >> und << hab ich jetzt auch gecheckt. VIELEN VIELEN DANK...