Laden...

KeyEvent bei 2 Tasten

Erstellt von alf468 vor 18 Jahren Letzter Beitrag vor 18 Jahren 3.257 Views
A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren
KeyEvent bei 2 Tasten

Ich möchte gerne überprüfen ob 2 Tasten gleichzeitig gedrückt wurden.

if(e.KeyCode==Keys.Up&&e.KeyCode!=Keys.A)

So geht es leider nicht aber wie sonst?

PS:Habe schon in der API und hier gesucht aber nix gefunden X(

N
4.644 Beiträge seit 2004
vor 18 Jahren

Hier mal ein Beispiel, was Alt + F4 unterdrückt.

private void Form_KeyDown( object sender, KeyEventArgs e )
{
    if( e.KeyData == ( Keys.Alt | Keys.F4 ) )
        e.Handled = true;
}

--> Verschoben nach Windows Forms.

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo alf468!

Leider geht das mit den Tasten nicht.

Es gibt da aber eine Möglichkeit dies zu überprüfen:



if(e.KeyCode==Keys.Up || e.KeyCode!=Keys.A)
{
   bool validate = false;

   if (e.KeyCode==Keys.Up)
   {
      // Überprüfe nun das Zeichen im Tastaturpuffer, welches direkt nach dem "UP"
      // gefolgt ist und vergleiche es mit "A"
      if (XXX = "A")
      { validate = true; }
   }
   else
   {
      // Überprüfe nun das Zeichen im Tastaturpuffer, welches direkt nach dem "A"
      // gefolgt ist und vergleiche es mit "UP"
      if (XXX = "UP")
      { validate = true; }
   }
   
   if (validate)
   {
      // tu was du willst
   }
}

Wie man den tastaturpuffer abruft, hab ich keine Ahnung!

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren

Das ist mir klar nur wie geht das wenn ich A+S drücke?

Edit:
norman_timo werde dein Tipp mal probieren

N
4.644 Beiträge seit 2004
vor 18 Jahren

Hast Du meinen Post gesehen und mal versucht Alt durch A und F4 durch S zu ersetzen?

A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren

Original von Noodles
Hast Du meinen Post gesehen und mal versucht Alt durch A und F4 durch S zu ersetzen?

Ja und das geht nicht

4.506 Beiträge seit 2004
vor 18 Jahren

Problem ist, dass das Drücken von A das Event schon ausgelöst wird, und glaub mir, Du schaffst es nicht diese Tasten wirklich GLEICHZEITIG zu drücken, und selbst wenn Dir das gelingt, arbeitet die Tastatur die Tasten mit einer Priorität ab, und nur einer gewinnt.

Shift, Control oder ähnliche Tasten bilden Sonderfunktionen, die eine Tastatureingabe verändern!

Hoffe jetzt ist es klar?

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren

Ich wollte eigentlich testen ob es möglich ist ein Label über die Forum zu "jagen".
Hoch,runter,rechts,links ist kein Problem aber wenn ich es nun schräg laufen lassen will ? Dazu muss der Anwender ja 2 Tasten gleichzeit drücken 🤔

@Timo Was meinst du mit Tastaturpuffer ?

4.506 Beiträge seit 2004
vor 18 Jahren

Jede Tastatureingabe wird in einem Puffer landen, damit keine Taste nicht registriert wird.

Das soll heißen, wenn Du z.B. einen Rechenintensiven Prozess hast, und dann versuchst nebenher im Notepad einen Text zu schreiben, dann kann es vorkommen, dass Deine Eingaben "nachlaufen", also erst nach einer Sekunde auf einen Rutsch als Buchstaben auf dem Bildschirm erscheinen.

Das Bedeutet, dass alle Tastatureingaben irgendwo zwischengespeichert werden, und eine Applikation sie Schritt für Schritt abrufen muss.

Diese Zwischenspeicherung ist hier der Tastaturpuffer.

Aber wie gesagt, ich weiß leider nicht, wie man in .NET auf diesen zugreifen kann (vielleicht sowas wie Key x = Key.GetNextKey(); oder so etwas in der Art...)

Hast Du das damit verstanden?

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

A
alf468 Themenstarter:in
196 Beiträge seit 2005
vor 18 Jahren

Jo verstanden 😁

S
8.746 Beiträge seit 2005
vor 18 Jahren

GetAsyncKeyState() aus user32.dll:

[DllImport("user32.dll")]
public static extern short GetAsyncKeyState(Keys vKey);

Allerdings muss man hier jeden Key einzeln prüfen.... Keys ist eine Aufzählung aus System.Windows.Forms.

Tendenziell ist wohl auch nicht jede Kombination von Tasten möglich, hängt von der Tastatur ab.

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo zusammen,

Thread nur überflogen, ich hoffe der Vorschlag kam noch nicht:

Das geht auch mit .NET-Mitteln. Man muss einfach selber mitrechnen. Zwei boolsche Variablen, für jeden Key eine. In KeyDown setzt man die entsprechende Variable auf true, in KeyUp auf false. Sind am Ende von KeyDown beide Variablen true, sind gerade beide Tasten gedrückt.

Ich halte das auch für die einzige sinnvolle Lösung. Das mit dem TatstaturPuffer ist nicht zielführend. Im hier beschriebenen Sinne (also GetNextKey o.ä.) würde sowas nur bei Konsolenanwendungen funktionierten. Bei Windows-Forms-Anwendungen gibt es in diesem Sinne keinen Tastaturpuffer, sondern eben nur Tastatur-Ereignisse.

herbivore