Fedon Geschrieben 17. November 2009 Geschrieben 17. November 2009 (bearbeitet) Hallo! Zuerst mal kurz zu mir, ich bin 17 Jahre alt und mache seit 01.09.2009 eine Ausbildung zum Fachinformatiker in Systemintegration. Habe gerade nicht viel zu tun, und wollte nun in VS C# programmieren. Da ich schon etwas länger an einer Anwendung programmiere, ist das hier nun nur ein Teil davon. So nun zu meinem Problem: Ich möchte, dass wenn man bei geöffnetem Fenster 2 Tasten eingibt, eine Meldung ausgegeben wird. bis jetzt sieht mein code dafür so aus: private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.A && e.KeyData == Keys. { MessageBox.Show("Taste A und B wurden gedrückt."); } }[/code] Nur werden die Tasten nicht erkannt. Was ist falsch daran? [Edit] Schreibe ich nur " if (e.KeyData == Keys.A) wird die Taste erkannt und die Nachricht ausgegeben.[/Edit] Dann habe ich noch ein Problem. Eigentlich soll nicht Taste A und B gedrückt werden, sondern eine Meldung (nicht die Beispielmeldung oben) soll bei einer Tastenkombination wie z.B. "alt+T" ausgegeben werden. Im Internet bin ich auf das hier gestoßen: MSDN-Microsoft Leider kann ich damit jetzt nichts anfangen, da ich noch in den Anfängen des Programmierens stecke. Ich hoffe ihr könnt mir helfen, Danke und Gruß, Fedon Bearbeitet 17. November 2009 von Fedon Zitieren
0815FIA Geschrieben 17. November 2009 Geschrieben 17. November 2009 Versuch mal in deinem if statt KeyData KeyValue zu nutzen. Zitieren
Fedon Geschrieben 17. November 2009 Autor Geschrieben 17. November 2009 Fehler: Der Operator "==" kann nicht auf Operanden vom Typ "int" und "System.Windows.Forms.Keys" angewendet werden. Funktioniert leider nicht. Zitieren
Bubble Geschrieben 17. November 2009 Geschrieben 17. November 2009 Nur werden die Tasten nicht erkannt. Was ist falsch daran? [Edit] Schreibe ich nur " if (e.KeyData == Keys.A) wird die Taste erkannt und die Nachricht ausgegeben.[/Edit] Weil e.KeyData entweder gleich Keys.A oder gleich Keys.B sein kann, jedoch niemals gleich beidem. Zitieren
Leibi Geschrieben 17. November 2009 Geschrieben 17. November 2009 Der Referenz zufolge würde ich das so realisieren: if (e.KeyCode == Keys.Alt && e.KeyCode == Keys.T) { MessageBox.Show("Tasten Alt und T wurden gedrückt!"); } Probiers mal aus und gib Bescheid =) EDIT: Wenn Bubble recht hat, probiers mit: if (e.KeyCode == Keys.Alt) { if(e.KeyCode == Keys.T) { MessageBox.Show("Tasten Alt und T wurden gedrückt!"); } } Zitieren
Fedon Geschrieben 17. November 2009 Autor Geschrieben 17. November 2009 zmd. akzeptiert er damit "alt", aber die MessageBox wird trotzdem nicht ausgegeben.. Danke bis hierher für die Antworten, freu mich auch über weitere, bin jetzt aber bis morgen früh hier nicht mehr online Gruß, Fedon Zitieren
0815FIA Geschrieben 17. November 2009 Geschrieben 17. November 2009 Ich würde mir mit KeyDown/KeyUp Events eine "Alt Taste Zustandsüberwachung" basteln, und dann je nach Zustand und zusätzlich gedrückter Taste Ereignisse auslösen. Zitieren
TDM Geschrieben 17. November 2009 Geschrieben 17. November 2009 Versuch mal in deinem if statt KeyData KeyValue zu nutzen. KeyEventArgs.KeyCode :floet: Zitieren
Bubble Geschrieben 17. November 2009 Geschrieben 17. November 2009 EDIT: Wenn Bubble recht hat, probiers mit: Natürlich habe ich recht. Eine Variable kann zu einem Zeitpunkt immer nur einen Wert haben. Ihr macht den Fehler, ALT wie eine Taste und nicht wie einen Modifier zu behandeln. Wenn die Form (und kein anderes Control) den Focus hat, dann kann man z.B. auf ALT+A so prüfen: private void Form2_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.A && e.Modifiers == Keys.Alt) { System.Windows.Forms.MessageBox.Show("ALT+A (KeyDown event)"); } } Zitieren
TDM Geschrieben 17. November 2009 Geschrieben 17. November 2009 Ihr macht den Fehler, ALT wie eine Taste und nicht wie einen Modifier zu behandeln. Da Alt eine Sondertaste ist: KeyEventArgs.Alt Ansonsten weiß ich zwar nicht, wie die Modifiers verknüpft werden können, aber ich würde Alt als binär-or abfragen, da sonst das problem auftritt, wenn ctrl und alt zusammen genutzt werden. Zitieren
Bubble Geschrieben 18. November 2009 Geschrieben 18. November 2009 Da Alt eine Sondertaste ist: KeyEventArgs.Alt Dieses Property kann man auch auswerten, allerdings würde, wenn man nur dieses eine Property (in dem Beispiel oben e.Alt) auf wahr prüft, auch eine Kombination von z.B. CTRL+ALT+A die if-Bedingung erfüllen. Um das zu verhindern, müsste man noch weitere Properties wie Control und Shift auswerten. In meinem Beispiel hingegen würde nur auf ALT+A reagiert werden. Ansonsten weiß ich zwar nicht, wie die Modifiers verknüpft werden können, aber ich würde Alt als binär-or abfragen, da sonst das problem auftritt, wenn ctrl und alt zusammen genutzt werden. Was ist mit diesem Satz gemeint? Zitieren
paslanmazbul Geschrieben 18. November 2009 Geschrieben 18. November 2009 if ((browser == "1") || (browser == "2") )) { Response.Redirect("wap"); } Zitieren
TDM Geschrieben 19. November 2009 Geschrieben 19. November 2009 Was ist mit diesem Satz gemeint? KeyEventArgs.Modifiers Property Gets the modifier flags for a KeyDown or KeyUp event. The flags indicate which combination of CTRL, SHIFT, and ALT keys was pressed. D.h. da können mehrere Sachen drin stehen, eine einfache Überprüfung (e.Modifiers == Keys.Alt) würde dann nicht bei gedrücktem CTRL funktionieren. Deswegen binär-OR um abzufragen, ob das Flag gesetzt ist. Zitieren
Bubble Geschrieben 19. November 2009 Geschrieben 19. November 2009 D.h. da können mehrere Sachen drin stehen, eine einfache Überprüfung (e.Modifiers == Keys.Alt) würde dann nicht bei gedrücktem CTRL funktionieren. Das ist auch das vom Fragesteller gewünschte Verhalten: soll bei einer Tastenkombination wie z.B. "alt+T" Er will z.B. auf ALT+T reagieren und nicht auf CTRL+ALT+T. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.