Problem mit KeyPreview

20/01/2008 - 17:36 von Thorsten Kleibaum | Report spam
Hallo zusammen,

ich habe ein kleines Problem im Zusammenhang mit der KeyPreview-Funktion
von Formularen.

Die Anwendung, die ich entwickel' - eine Kasse -, soll sowohl über eine
Bildschirmtastatur (Touchscreen) als auch über eine angeschlossene
Tastatur bedienbar sein und die Eingaben in einem Textfeld erscheinen.
Um das Verhalten einer Registrierkasse zu simulieren (z.B. festes
Komma), werden die Eingaben der Tastatur nicht direkt ins Textfeld
geschrieben - dies ist sogar ReadOnly - sondern durch KeyPreview vom
Formular abgefangen und in einer Methode zu der Zeichenkette
zusammengesetzt, die letztendlich in das Textfeld eingetragen wird.

Das Problem das ich habe, ist nun, daß wenn ich sowohl Eingaben über den
Bildschirm als auch über die Tastatur tàtige es ein Problem mit "Enter"
gibt. Denn habe ich über den Bildschirm auf einen Button geklickt (bspw.
eine Ziffer), so erhàlt dieser den Fokus. Drücke ich nun auf der
Tastatur "Enter", so bekommt das Formular dies trotz KeyPreview nicht
mit, sondern stattdessen wird der Button ein zweites Mal gedrückt.

Beholfen habe ich mir bislang damit, daß ich zu Beginn der
Programmausführung den Fokus auf das Textfeld lege, und diesen auch dort
lasse, indem ich in dessen Leave-Ereignis den Fokus sofort wieder auf
das Textfeld setze.

Das funktioniert zwar, hat aber den Nachteil, daß ich mitunter nun einen
blinkenden Cursor im Textfeld habe, oder der Inhalt des Textfelds
markiert (also blau hinterlegt) ist. Beides ist nicht schön.
Wann und wieso was davon auftritt, habe ich bislang noch nicht genauer
hinterfragt, weil ich mir sicher bin, daß es eine elegantere Methode
gibt. Hat hier vielleicht jemand 'nen Tipp für mich?

Thx
Thorsten
 

Lesen sie die antworten

#1 Herfried K. Wagner [MVP]
20/01/2008 - 21:06 | Warnen spam
Hallo Thorsten!

"Thorsten Kleibaum" schrieb:
ich habe ein kleines Problem im Zusammenhang mit der KeyPreview-Funktion
von Formularen.

Die Anwendung, die ich entwickel' - eine Kasse -, soll sowohl über eine
Bildschirmtastatur (Touchscreen) als auch über eine angeschlossene
Tastatur bedienbar sein und die Eingaben in einem Textfeld erscheinen.
Um das Verhalten einer Registrierkasse zu simulieren (z.B. festes
Komma), werden die Eingaben der Tastatur nicht direkt ins Textfeld
geschrieben - dies ist sogar ReadOnly - sondern durch KeyPreview vom
Formular abgefangen und in einer Methode zu der Zeichenkette
zusammengesetzt, die letztendlich in das Textfeld eingetragen wird.

Das Problem das ich habe, ist nun, daß wenn ich sowohl Eingaben über den
Bildschirm als auch über die Tastatur tàtige es ein Problem mit "Enter"
gibt. Denn habe ich über den Bildschirm auf einen Button geklickt (bspw.
eine Ziffer), so erhàlt dieser den Fokus. Drücke ich nun auf der
Tastatur "Enter", so bekommt das Formular dies trotz KeyPreview nicht
mit, sondern stattdessen wird der Button ein zweites Mal gedrückt.



Du könntest anstelle von 'Button' z.B. eine Werkzeugleiste oder ein anderes
Steuerelement benutzen, das nicht den Fokus erhalten kann.

Beholfen habe ich mir bislang damit, daß ich zu Beginn der
Programmausführung den Fokus auf das Textfeld lege, und diesen auch dort
lasse, indem ich in dessen Leave-Ereignis den Fokus sofort wieder auf
das Textfeld setze.



Eventuell ist es sinnvoller, den Fokus im 'Click'-Ereignis der Schaltflàchen
zurückzusetzen. Dennoch frage ich mich, warum das Textfeld überhaupt den
Fokus erhalten soll, wenn Du den Text selbst zuweist. Wàre da nicht ein
Label-Steuerelement die bessere Wahl?

M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://dotnet.mvps.org/dotnet/faqs/>

Ähnliche fragen