Autor Beitrag
lamda
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 14.02.10 21:10 
Hi
Ich hab ein Problem und zwar beim abfangen der Tasten eingaben, es funktioniert soweit auch nur mit den Pfeiltasten hab ich noch mühe.

ausblenden C#-Quelltext
1:
2:
 if (e.KeyData == (Keys.A | Keys.B | Keys.C))
textBox1.Text = "abc";

Das funktioniert!

ausblenden C#-Quelltext
1:
2:
if (e.KeyData == (Keys.Up | Keys.Right))
textBox1.Text = "oben rechts";

Das nicht, wenn nicht nach Rechts klicke erscheint der Text.

ausblenden C#-Quelltext
1:
2:
if (e.KeyData == (Keys.Up | Keys.Left))
textBox1.Text = "oben links";

Bei dem das selbe wenn ich nach Rechts klicke erscheint der Text.

Funktioniert das mit dieser Methode überhaupt?

Diese Hotkeys müssen nur funktionieren wenn die Form offen ist.

Danke im Voraus

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: So 14.02.10 22:49 
Hallo und :welcome:

Das ist eine falsche Formulierung der oder-Bedingung. Du musst es trennen (jede Bedingung separat und dann verknüpfen):
ausblenden C#-Quelltext
1:
2:
if(e.KeyData == Keys.Up || e.KeyData == Keys.Right))
  textBox1.Text = "oben rechts";

Es ist sozusagen Zufall, dass deine Variante überhaupt kompiliert wurde und in einem Fall sogar ein richtiges Ergebnis liefert.

Jürgen
lamda Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 14.02.10 23:10 
Es soll aber nur in die if wenn beide Tasten gedrückt wurden nicht nur eine.
Mit && funktioniert es nicht, mit | funktioniert es bei normalem Text.
Laurence
Hält's aus hier
Beiträge: 14

Win XP Home SP3
Visual Studio 2008 Pro
BeitragVerfasst: So 14.02.10 23:20 
Mhh, eigentlich müsste es funktionieren, oder?
Ich hab mal folgende Seite hier gefunden:
www.multidata.at/Sit...al_csharp_15_001.htm

Ausschnitt:
Zitat:
... Sehen wir uns nun an einem Beispiel an, wie einfach eine bestimmte Tastenkombination abgefragt werden kann. Ausgangspunkt sei die Forderung, mit der Tastenkombination Shift + Alt + F9 das aktuelle Formular zu schließen:

ausblenden C#-Quelltext
1:
2:
3:
private void Form1_KeyDown(object sender, KeyEventArgs e) { 
  if(e.KeyData == (Keys.Shift | Keys.Alt | Keys.F9)) 
    this.Close();_$ret_}


Es werden die Keys-Werte der gewünschten Kombination mit dem bitweisen ODER-Operator verknüpft und das Ergebnis mit dem aktuellen Inhalt von KeyData verglichen. Stimmt die gewünschte Tastenkombination mit dem vorliegenden Bitmuster überein, wird die Methode Close auf das aktuelle Form-Objekt aufgerufen. ...


Vielleicht hilft das!
Gruß
lamda Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 14.02.10 23:51 
Ja mit Shift Alt und F9 funktioniert es nur mit den Pfeiltasten nicht richtig. Nur einzelne Pfeiltasten können richtig "gelesen" werden.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 15.02.10 00:05 
KeyDown für jede Taste einzeln gefeuert und in den EventArgs steht auch immer nur diese eine Taste (abgesehen eben von Strg etc.). Du musst dir also überlegen, wie du dir merken kannst, dass beim Drücken der zweiten Taste KeyDown bereits für die erste gefeuert wurde (und auch noch kein KeyUp dafür aufgetreten ist).

Eine Alternative wäre noch GetKeyState aus der Win-API: sanity-free.org/17/o..._implementation.html

PS: @user profile iconlamda - :welcome:
Soll dein Nickname eigentlich an einen gewissen Buchstaben erinnern ;) ?

_________________
>λ=
lamda Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Mo 15.02.10 00:19 
Versuch mich gerade daran, 2 Bool Variablen zu deklarieren und bei KeyDown wird die Variabel auf True gesetzt, bei KeyUp auf false.

Wie kann ich in der Main funktion immer nachfragen ob diese Variablen auf true sind? Wenn ich eine While mache gibt es eine Endlosschlaufe und das Programm stürzt ab.

@Kha Der Name kommt aus dem Griechischen. Weil ich keine Alpha oder Beta will sondern die Lamda Version. :-P
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 15.02.10 20:08 
user profile iconlamda hat folgendes geschrieben Zum zitierten Posting springen:
Versuch mich gerade daran, 2 Bool Variablen zu deklarieren und bei KeyDown wird die Variabel auf True gesetzt, bei KeyUp auf false.
Das ist der richtige Weg :D . Aber warum willst du sie in der Main abfragen, warum nicht direkt dort, wo du sie auf true setzt?

user profile iconlamda hat folgendes geschrieben Zum zitierten Posting springen:
@Kha Der Name kommt aus dem Griechischen.
Oh, dass die Schreibweise quasi die offizielle Übersetzung ist, wusste ich noch nicht :) .

_________________
>λ=