C# Tastatureingabefrequenz verringern
Mark
- programmiertechnik
0 Der Martin0 Mark0 karsten760 Der Martin
0 Tom
0 yetanotheruser
Hallo,
ich habe eine Programm, bei dem ich mit den Pfeiltasten den Focus von Buttons navigieren kann. Sprich, wenn ich die rechte Pfeiltaste drücke, springt der Focus auf den nächsten rechtsliegenden Button. Wenn ich die Pfeiltaste aber dauerhaft gedrückt halte, geht das rasend schnell. Wie kann ich die Anschlagfrequenz beim dauerhaften Drücken einer Taste verringern?
Gruß
Mark
Hi,
ich habe eine Programm, bei dem ich mit den Pfeiltasten den Focus von Buttons navigieren kann. Sprich, wenn ich die rechte Pfeiltaste drücke, springt der Focus auf den nächsten rechtsliegenden Button. Wenn ich die Pfeiltaste aber dauerhaft gedrückt halte, geht das rasend schnell.
ja, mit bis zu 30/s, wenn's der Nutzer so will. Default ist AFAIK 6/s. :-)
Wie kann ich die Anschlagfrequenz beim dauerhaften Drücken einer Taste verringern?
Von der Applikation aus möglicherweise gar nicht. Du hast nichts über die OS-Plattform gesagt, aber sowohl unter Windows als auch unter Linux ist das eine Systemeinstellung, die entsprechende Zugriffsrechte erfordert.
Ich könnte mir höchstens vorstellen, dass du an der Stelle im Programm, wo das Tasten-Event bearbeitet wird, selbiges einfach ignorierst, wenn seit dem letzten bearbeiteten Event nicht mindestens, sagen wir, 200ms vergangen sind. Damit hast du nicht die Tastatur-Repeatrate geändert, sondern die Wirkung. Auch gut, oder?
So long,
Martin
Ich könnte mir höchstens vorstellen, dass du an der Stelle im Programm, wo das Tasten-Event bearbeitet wird, selbiges einfach ignorierst, wenn seit dem letzten bearbeiteten Event nicht mindestens, sagen wir, 200ms vergangen sind. Damit hast du nicht die Tastatur-Repeatrate geändert, sondern die Wirkung. Auch gut, oder?
Hallo,
der Gedanke das über das Tastenevent und mittels Timer abzufangen hatte ich auch schon. Ich wollte nur wissen, ob es ggf. eine einfachere Lösung gibt.
Gruß
Mark
Hallo,
ich glaube Der Martin meinte eher, daß Du die Zeit des Bearbeitens des Ereignisses in einer Variablen speicherst und die jeweils aktuelle Zeit (DateTime.Now) des erneuten Ereignisses mit der gespeicherten Zeit vergleichst. Ein Timer ist nicht nötig.
MfG
Hi,
ich glaube Der Martin meinte eher, daß Du die Zeit des Bearbeitens des Ereignisses in einer Variablen speicherst und die jeweils aktuelle Zeit (DateTime.Now) des erneuten Ereignisses mit der gespeicherten Zeit vergleichst.
ja, im Prinzip meinte ich das so.
Ein Timer ist nicht nötig.
Wie man's nimmt. ;-)
In gewisser Weise verwendet man auf diese Weise auch einen Timer - nämlich den, der im System sowieso frei mitläuft. Klingt vielleicht nach Haarspalterei, aber es kommt drauf an, was man unter dem Begriff "Timer" verstehen möchte.
Ciao,
Martin
Hallo Martin,
ich denke, da sich die Frage auf die Programmiersprache C# bezieht, ist der Begriff 'Timer' als Synonym für eine der verschiedenen, durch das Framework bereitgestellten Timer-Klassen anzusehen. Eine Instanz einer solchen Timer-Klasse muss nicht verwendet werden, da es ausreichend ist die aktuelle Systemzeit über die statische Methode 'DateTime.Now' abzufragen und in einem entsprechenden Feld für die spätere Verwendung zu speichern.
Haare sind zum SCHNEIDEN da und nicht zum SPALTEN.
MfG
Hi,
ich denke, da sich die Frage auf die Programmiersprache C# bezieht, ist der Begriff 'Timer' als Synonym für eine der verschiedenen, durch das Framework bereitgestellten Timer-Klassen anzusehen.
das mag schon sein, und klingt auch vernünftig; ich verwende die Begriffe aber grundsätzlich abstrakter und normalerweise nicht speziell auf eine bestimmte Programmiersprache oder auf ein bestimmtes Framework bezogen.
Haare sind zum SCHNEIDEN da und nicht zum SPALTEN.
Das habe ich auch noch nicht gehört. :-)
Ciao,
Martin
Hello,
der Gedanke das über das Tastenevent und mittels Timer abzufangen hatte ich auch schon. Ich wollte nur wissen, ob es ggf. eine einfachere Lösung gibt.
Wenn es um PCs mit Intel-Architektur geht...
Es gibt auch für C# Module für die Schnittstellensteuerung. Leider habe ich das zu kurz gemacht und habe es mir daher nicht gemerkt, welche Module/Klassen das waren. Aber man kann aus C# und Mono auch Einfluss auf die "BIOS-Schicht" nehmen, die allerdings dann vermutlich von Windows oder Linux ohnehin emuliert bzw. ersetzt werden. Du kannst die Geschwindigkeitseinstellung auslesen und auch setzen.
Ich suche nochmal in meinem Papierarchiv. Wir haben damit mal eine Stunde herumgespielt. Vielleicht ist auch jemand schneller.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Servus Mark,
momentan bin ich etwas verwundert über die Antworten hier. Das was du beschreibts ist die programmatische Änderung einer "Benutzereinstellung". Du schreibst damit dem User vor, mit welcher Anschlagsfrequenz er sich zu begnügen hat. Wenn das der Sinn deiner Anwendung ist, dann sind die vorgeschlagenen Tips sicher gute Wege, aber Benutzerfreundlich ist das dann nicht wirklich.
Grüße
Ben