Entwickler-Ecke
WinForms - Weiterschalten mit ENTER Taste
Izze - Fr 06.02.09 18:08
Titel: Weiterschalten mit ENTER Taste
Hallo,
ich würde gerne beim Drücken der ENTER-Taste in Textboxen den Effekt einer TAB-Taste haben, also ein Durchschalten durch die einzelnen Boxen.
Folgendes habe ich gefunden:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| private void textBoxKcal100_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar.Equals("\r")) { this.ProcessTabKey(true); e.Handled = true; } } |
Es sieht gut aus, es macht keine Fehler, es hat aber auch überhaupt keinen Effekt.
Nix passiert beim Drücken der ENTER-Taste, es piepst nur. Warum nur? :roll:
jaenicke - Fr 06.02.09 19:17
Kommt es denn im if an? Also wird die Taste erfolgreich abgefangen?
JüTho - Fr 06.02.09 19:19
Mach den Vergleich mal so:
C#-Quelltext
1:
| if (e.KeyChar == (char)Keys.Return) |
Gruß Jürgen
Izze - Fr 06.02.09 20:15
Nein, hilft nichts.
Bleibt dabei, keine Funktion.
PerryRhodan - Fr 06.02.09 20:17
Hallo,
Schieb die Behandlungsroutine mal bitte aus der OnKeyPress raus und verwende stattdessen die OnKeyUp.
Grüße
PerryRhodan
jaenicke - Sa 07.02.09 03:09
JüTho hat folgendes geschrieben : |
Mach den Vergleich mal so:
C#-Quelltext 1:
| if (e.KeyChar == (char)Keys.Return) |
Gruß Jürgen |
Izze hat folgendes geschrieben : |
Nein, hilft nichts.
Bleibt dabei, keine Funktion. |
Also bei mir geht das. :nixweiss:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Return) { this.ProcessTabKey(true); e.Handled = true; } } |
Mit deinem Quelltext wurde Equals zu false ausgewertet, so geht es aber.
Izze - Sa 07.02.09 11:04
Ich verstehe es auch nicht.
Hab ich evtl. irgendwo etwas weggenommen was jetzt fehlt?
jaenicke - Sa 07.02.09 13:35
Setz doch mal einen Haltepunkt auf Zeile 3 bei mir. Kommt das Programm dort an? Was passiert dann?
Izze - Sa 07.02.09 13:49
Nein, es wird dort nie angekommen. Zumindest hält das Programm dort nicht.
Return hat keinerlei Wirkung.
JüTho - Sa 07.02.09 14:27
Grrr... In einem anderen Forum wurde ich gerade darauf hingewiesen, dass KeyPress hier nicht funktioniert. (Das war mir zwar grundsätzlich bewusst, aber ich hatte es nicht beachtet.)
SDK-Doku/MSDN hat folgendes geschrieben: |
Control.KeyPress-Ereignis
Das KeyPress-Ereignis wird nicht von Tasten für nicht druckbare Zeichen ausgelöst, wobei diese aber das KeyDown-Ereignis und das KeyUp-Ereignis auslösen. |
Also ersetze die Prüfung in
KeyDown oder
KeyUp (mit "if(e.KeyCode == Keys.Return)"), und alles müsste klappen.
Gruß Jürgen
jaenicke - Sa 07.02.09 14:43
Aber warum funktioniert es denn bei mir? :gruebel:
Mein Projekt liegt im Anhang inkl. Exe (da nicht anders angegeben habe ich Visual Studio 2008 + .NET 3.5 benutzt).
Izze - Sa 07.02.09 14:45
Ich schau mal, moment.
Kha - Sa 07.02.09 14:50
Izze hat folgendes geschrieben : |
Nein, es wird dort nie angekommen. |
Die Methode ist aber schon als Eventhandler des Ereignisses eingetragen?
Izze - Sa 07.02.09 14:52
Hmm, also mehr als kopieren und einfach den Namen der Textbox ersetzen geht ja nicht:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| private void textBoxKcal100_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Return) { this.ProcessTabKey(true); e.Handled = true; } } |
Und hat keine Wirkung. Seltsam.
Ich bin ja noch sehr neu und unerfahren, hab ich an anderer Stelle evtl. unwissentlich etwas verbaselt was sich hier bemerkbar macht?
jaenicke - Sa 07.02.09 14:57
Izze hat folgendes geschrieben : |
Hmm, also mehr als kopieren und einfach den Namen der Textbox ersetzen geht ja nicht: |
Hast du denn vorher auch nur kopiert?
Kha hat folgendes geschrieben : |
Die Methode ist aber schon als Eventhandler des Ereignisses eingetragen? |
Denn du musst auf die Textbox klicken und dann rechts unten bei Properties mit dem Blitz auf Ereignisse umschalten und bei KeyPress das Event auch eintragen. (Bzw. beim C# Builder links unten unter Ereignisse)
Izze - Sa 07.02.09 15:03
jaenicke hat folgendes geschrieben : |
Denn du musst auf die Textbox klicken und dann rechts unten bei Properties mit dem Blitz auf Ereignisse umschalten und bei KeyPress das Event auch eintragen. (Bzw. beim C# Builder links unten unter Ereignisse) |
Oh mein Gott ist das peinlich. :oops:
Nu gehts...sorry... :flehan:
JüTho - Sa 07.02.09 15:04
Izze hat folgendes geschrieben : |
Hmm, also mehr als kopieren und einfach den Namen der Textbox ersetzen geht ja nicht: |
Doch. So etwas wird auch benötigt, das steht so ähnlich normalerweise in der Designer.cs:
C#-Quelltext
1:
| textBoxKcal100.KeyPress += textBoxKcal100_KeyPress; |
Wenn Code für einen EventHandler einfach kopiert wird, muss das manuell gemacht werden. Erst dadurch wird der EventHandler auch dem Event zugewiesen.
OK, erledigt (während ich das geschrieben und abgeschickt hatte, wart Ihr schon fertig).
Zum Problem mit KeyPress und KeyDown/KeyUp:
jaenicke hat folgendes geschrieben : |
Aber warum funktioniert es denn bei mir? |
Hmm, vielleicht wird Return als druckbares Zeichen verstanden (weil es beim Drucken eine neue Zeile produziert).
Wenn ich mir verschiedene Hinweise in der SDK-Doku/MSDN durchlese, habe ich den Eindruck, dass NET selbst die Return-Taste nicht einheitlich verarbeitet. (Vielleicht geht das sogar auf Win-API zurück, so genau weiß ich das auch nicht.)
Vielleicht sollten wir es so machen: Cursortasten sind eindeutig "nicht druckbar", bei Tasten wie Return ausprobieren, ob KeyPress passt oder nicht.
Gruß Jürgen
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!