[C#] KeyDown: dauerhaftes Drücken der Taste erst nach einer Sekunde erkennbar

XtremeCJ

Erfahrenes Mitglied
Es kennen sicher viele von euch: wenn man eine Taste länger gedrückt hält, dauert es eine Sekunde, bis das registriert wird [einfaches Beispiel wäre, im Notepad einen Buchstaben gedrückt zu halten; erst nach einer halben bis einer Sekunde wird das dauerhafte Drücken registriert].

Dafür gibt es doch sicher eine Eigenschaft. Ich möchte das gerne abschalten, sodass sofort eine Reihe von Buchstaben geschrieben wird, wenn ich die Taste gedrückt halte.

Ein Kollege programmiert Tetris mit GDI+, dafür ist es unumgänglich.

Danke schonmal.
 
Du bekommst ja trotzdem das erste KeyDown. Setze dir da ein bool Flag, dass die Taste gedrückt ist. Das Flag löschst du erst, wenn ein entsprechendes KeyUp kommt.

Im Gameloop das Flag abfragen, fertig.
 
Stimmt schon, das wär die eine Lösung. Dachte mir aber, dass es dafür eine Eigenschaft geben muss. Danke für deine Lösung, aber ich lass den Thread mal noch eine Weile offen, falls doch einer eine entsprechende Eigenschaft kennt.
 
Du bekommst ja trotzdem das erste KeyDown.
Das Delay ist eine Systemeinstellung von Windows. Das KeyDown-Event wird erst nach dem Ablauf des Delays ausgelöst. Damit lässt sich das Problem eigentlich nicht lösen.

@XtremeCJ
Du müsstest die o.g. Systemeinstellung anpassen. Mit C# lässt sie sich zwar auslesen (System.Windows.Form.SystemInformation), aber leider nicht setzen.
Dafür muss dann eine API-Funktion bemüht werden, siehe http://www.pinvoke.net/default.aspx/user32.SystemParametersInfo
Die für dich relevante Eigenschaft ist: SPI_GETKEYBOARDDELAY

Gruß
MCoder
 
Zurück