Autor Beitrag
Izze
Hält's aus hier
Beiträge: 12

Vista

BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 06.02.09 19:17 
Kommt es denn im if an? Also wird die Taste erfolgreich abgefangen?
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: Fr 06.02.09 19:19 
Mach den Vergleich mal so:
ausblenden C#-Quelltext
1:
        if (e.KeyChar == (char)Keys.Return)					

Gruß Jürgen
Izze Threadstarter
Hält's aus hier
Beiträge: 12

Vista

BeitragVerfasst: Fr 06.02.09 20:15 
Nein, hilft nichts.

Bleibt dabei, keine Funktion.
PerryRhodan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 34


C# (VS 2005 + 2008), .NET 2.0 + 3.5 (inkl. WPF, WCF)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.02.09 03:09 
user profile iconJüTho hat folgendes geschrieben Zum zitierten Posting springen:
Mach den Vergleich mal so:
ausblenden C#-Quelltext
1:
        if (e.KeyChar == (char)Keys.Return)					

Gruß Jürgen
user profile iconIzze hat folgendes geschrieben Zum zitierten Posting springen:
Nein, hilft nichts.

Bleibt dabei, keine Funktion.
Also bei mir geht das. :nixweiss:
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 12

Vista

BeitragVerfasst: Sa 07.02.09 11:04 
Ich verstehe es auch nicht.

Hab ich evtl. irgendwo etwas weggenommen was jetzt fehlt?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 12

Vista

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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).
Einloggen, um Attachments anzusehen!
Izze Threadstarter
Hält's aus hier
Beiträge: 12

Vista

BeitragVerfasst: Sa 07.02.09 14:45 
Ich schau mal, moment.
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 07.02.09 14:50 
user profile iconIzze hat folgendes geschrieben Zum zitierten Posting springen:
Nein, es wird dort nie angekommen.
Die Methode ist aber schon als Eventhandler des Ereignisses eingetragen?

_________________
>λ=
Izze Threadstarter
Hält's aus hier
Beiträge: 12

Vista

BeitragVerfasst: Sa 07.02.09 14:52 
Hmm, also mehr als kopieren und einfach den Namen der Textbox ersetzen geht ja nicht:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 07.02.09 14:57 
user profile iconIzze hat folgendes geschrieben Zum zitierten Posting springen:
Hmm, also mehr als kopieren und einfach den Namen der Textbox ersetzen geht ja nicht:
Hast du denn vorher auch nur kopiert?
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
Hält's aus hier
Beiträge: 12

Vista

BeitragVerfasst: Sa 07.02.09 15:03 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: Sa 07.02.09 15:04 
user profile iconIzze hat folgendes geschrieben Zum zitierten Posting springen:
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:
ausblenden 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:

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
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