C# KeyPress-Event auf Win-Form Probleme

Thomas95

Cadet 3rd Year
Registriert
Dez. 2012
Beiträge
46
Hey Leute,
hier ist meine Problemstellung:
Ich habe eine Windows-Forms Anwendung, auf der ein KeyPress Event ist. Hier funktioniert alles wunderbar. Nun lade ich in meine Panels die verschiedenen Benutzersteuerelemente. Jetzt funktioniert das KeyPressed-Event noch genau 1 mal und dann gar nichts mehr :eek: Warum?

Danke schon mal (:

Der Code wie ich die Benutzersteuerelemente lade, falls es hilft:
(Panel1 liegt über fast die ganze Form und alle anderen Panels befinden sich im Panel1)

Code:
Benutzer user = new Benutzer(name); //Benutzer, Münzen und Player sind Benutzersteuerelemente
panel2.Controls.Add(user);
panel2.BackColor = Color.Transparent;

Münzen coins = new Münzen();
panel3.Controls.Add(coins);
panel3.BackColor = Color.Transparent;


Image background = Image.FromFile("C:\\Users\\Thomas\\Desktop\\Mario.png");
panel1.BackgroundImage = background;


Player player = new Player();
panel4.Controls.Add(player);
panel4.BackColor = Color.Transparent;
 
Auf welches Control machst du denn den KeyPress-Event?

Mit diesem Schnipsel kann ich zumindestens nicht viel anfangen, aber nen Tipp hät ich trotzdem ;)
Wähle mal die Form selber aus und setz die Option "KeyPreview" auf true und dann machst du
das KeyPress-Event von der Form und nicht von einem der Panels oder wo auch immer du es derzeit hast.
 
KeyPreview der Form auf true gesetzt? Ich schätze der Fokus rückt dann auf ein anderes Control. Aus dem Stück wird man leider nicht schlau.
 
Die KeyPress-Control liegt auf der Windows-Form selbst:
Code:
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {
            switch (e.KeyChar){
                case 'w':
                    MessageBox.Show("w");
                    break;
                case 'a':
                    MessageBox.Show("a");
                    break;
                case 's':
                    MessageBox.Show("s");
                    break;
                case 'd':
                    MessageBox.Show("d");
                    break;
            }
        }

Das funktiert auch wunderbar. Dann drücke ich in der Form (in der Ausführung) auf Datei-Neu, dadurch wird folgender Code ausgeführt:

Code:
        private void neuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string name = Microsoft.VisualBasic.Interaction.InputBox("Bitte geben Sie ihren Spieler-Namen ein: ", "Spieler-Name", "Spieler 1", 50, 50);
            Benutzer user = new Benutzer(name);
            panel2.Controls.Add(user);
            panel2.BackColor = Color.Transparent;

            Münzen coins = new Münzen();
            panel3.Controls.Add(coins);
            panel3.BackColor = Color.Transparent;


            Image background = Image.FromFile("C:\\Users\\Thomas\\Desktop\\Mario.png");
            panel1.BackgroundImage = background;


            Player player = new Player();
            panel4.Controls.Add(player);
            panel4.BackColor = Color.Transparent;            
        }

Und ab hier geht der KeyPess-Control noch genau 1 mal und danach nie wieder.

Also: Ich starte die Datei, drücke "a" und es kommt ein Fenster mit "a", dies kann auch mit w, s und d belieb oft wiederholt werden. Danach drücke ich im Menü auf Datei - Neu, wodurch alle Panels geladen werden.
Jetzt kann noch 1 mal auf w, a, s oder d drücken, worauf wieder ein Fenster mit dem Buchstaben kommt und danach passiert nichts mehr.

Angenommen der Fokus verschiebt sich auf z.B. eines der Panels, sollte dann nicht trotzdem der KeyListener der Form funktionieren?
Bzw. wie setzte ich den Fokus vom Panel auf die Form?

-----
Zusatz: Danach wird eig. kein Code mehr ausgeführt, die Benutzersteuerelemente machen im Moment nichts.
Ergänzung ()

Irgendetwas passiert beim laden von den Benutzersteuerelementen, sobald ich auch nur eines lade funktioniert das Key-Event nicht mehr.
Den Hintergrund des Panels1 kann ich ohne Probleme ändern.
 
Zuletzt bearbeitet:
Ich mal versucht deinen Code zu kopieren und hatte den gleichen Effekt, wie oben schon beschrieben muss man dann aber nur die Eigenschaft KeyPreview auf True setzen, damit es durchgängig funktioniert.
 
Wegen dem Fokus setzt man die Eigenschaft "KeyPreview" der Form auch auf TRUE.
Das sorgt dafür, dass die Key-Events der Panels (oder allgemein der Controls) in jedem Fall
an die Form weitergeleitet werden...

somit ist es dann auch egal ob jetzt das Panel oder eine PictureBox oder ein Label den Focus hat.
Drückst du eine Taste, dann empfängt die Form das und kann es im Event verarbeiten.
 

Ähnliche Themen

Zurück
Oben