Autor |
Beitrag |
Izze
Hält's aus hier
Beiträge: 12
Vista
|
Verfasst: Fr 06.02.09 18:08
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? 
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 06.02.09 19:17
Kommt es denn im if an? Also wird die Taste erfolgreich abgefangen?
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Fr 06.02.09 19:19
Mach den Vergleich mal so:
C#-Quelltext 1:
| if (e.KeyChar == (char)Keys.Return) |
Gruß Jürgen
|
|
Izze 
Hält's aus hier
Beiträge: 12
Vista
|
Verfasst: Fr 06.02.09 20:15
Nein, hilft nichts.
Bleibt dabei, keine Funktion.
|
|
PerryRhodan
      
Beiträge: 34
C# (VS 2005 + 2008), .NET 2.0 + 3.5 (inkl. WPF, WCF)
|
Verfasst: Fr 06.02.09 20:17
Hallo,
Schieb die Behandlungsroutine mal bitte aus der OnKeyPress raus und verwende stattdessen die OnKeyUp.
Grüße
PerryRhodan
_________________ C# im IRC: QuakeNet, Channel: #dotNet.de
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.02.09 03:09
|
|
Izze 
Hält's aus hier
Beiträge: 12
Vista
|
Verfasst: Sa 07.02.09 11:04
Ich verstehe es auch nicht.
Hab ich evtl. irgendwo etwas weggenommen was jetzt fehlt?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
Hält's aus hier
Beiträge: 12
Vista
|
Verfasst: 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
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.02.09 14:43
Aber warum funktioniert es denn bei mir?
Mein Projekt liegt im Anhang inkl. Exe (da nicht anders angegeben habe ich Visual Studio 2008 + .NET 3.5 benutzt).
Einloggen, um Attachments anzusehen!
|
|
Izze 
Hält's aus hier
Beiträge: 12
Vista
|
Verfasst: Sa 07.02.09 14:45
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: 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 
Hält's aus hier
Beiträge: 12
Vista
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 07.02.09 14:57
|
|
Izze 
Hält's aus hier
Beiträge: 12
Vista
|
Verfasst: Sa 07.02.09 15:03
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: 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
|
|