it-nuke
Goto Top

CSharp Keydown Problem

[Programmieranfänger]

Guten Morgen,

bei folgendem Programm soll er auf Pfeiltasten reagieren wenn ein gewisses Panel zu sehen ist und sich X, Y koordinatentechnisch durch die Welt bewegen.
Mein Problem ist aber dass er nicht auf Pfeiltasten reagiert nur auf andere Tastatur eingaben.
Habe auch schon gelesen das mit Pfeiltasten ein bisschen anders sein soll und man lieber PreviewKeyDown verwenden sollte aber dafür brauch man
ja ein Objekt das fokussierst werden kann. Fokussieren der Form oder des Panels ist nicht möglich oder?

Gibt es eine Möglichkeit meine Quelltext mit geringen Änderungen auf die Pfeiltasten reagieren zu lassen oder ganz falsch an die Sache gegangen?


__________________________________________________________________________________________________________________________________________________

private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (this.Controls["panel" + "1"].Visible == true & _load == true)  
            {
                MessageBox.Show("Event \"panel_KeyDown\" konnte aufgerufen werden");  

                switch (e.KeyCode)
                {
                    case Keys.Down:
                        for (int i = 0; i < 1; i++)
                        {
                            if (((PictureBox)this.Controls["panel" + "1"].Controls["sp" + i.ToString()]).Height < 740)  
                            {
                                ((PictureBox)this.Controls["panel" + "1"].Controls["sp" + i.ToString()]).Height = ((PictureBox)this.Controls["panel" + "1"].Controls["sh" + i.ToString()]).Height + 10;  
                            }
                        }
                        break;
                    case Keys.Up:
                        for (int i = 0; i < 1; i++)
                        {
                            if (((PictureBox)this.Controls["panel" + "1"].Controls["sp" + i.ToString()]).Height > 10)  
                            {
                                ((PictureBox)this.Controls["panel" + "1"].Controls["sp" + i.ToString()]).Height = ((PictureBox)this.Controls["panel" + "1"].Controls["sh" + i.ToString()]).Height - 10;  
                            }
                        }
                        break;
                    case Keys.Right:
                        for (int i = 0; i < 1; i++)
                        {
                            if (((PictureBox)this.Controls["panel" + "1"].Controls["sp" + i.ToString()]).Width < 1160)  
                            {
                                ((PictureBox)this.Controls["panel" + "1"].Controls["sp" + i.ToString()]).Width = ((PictureBox)this.Controls["panel" + "1"].Controls["sh" + i.ToString()]).Width + 10;  
                            }
                        }
                        break;
                    case Keys.Left:
                        for (int i = 0; i < 1; i++)
                        {
                            if (((PictureBox)this.Controls["panel" + "1"].Controls["sp" + i.ToString()]).Width > 10)  
                            {
                                ((PictureBox)this.Controls["panel" + "1"].Controls["sp" + i.ToString()]).Width = ((PictureBox)this.Controls["panel" + "1"].Controls["sh" + i.ToString()]).Width - 10;  
                            }
                        }
                        break;
                }
            }
        } 

Content-Key: 282598

Url: https://administrator.de/contentid/282598

Printed on: April 19, 2024 at 21:04 o'clock

Mitglied: 122990
122990 Sep 11, 2015 updated at 09:16:07 (UTC)
Goto Top
if (this.Controls["panel" + "1"].Visible == true & _load == true)
Fällt mir jetzt so auf Anhieb direkt ins Auge : Zeile 3 ist der UND Operator falsch, der muss doppelt sein &&

Und das Event sollte auf dem Control registriert sein in dem du darauf reagieren willst. Zusätzlich noch die Eigenschaft KeyPreview der Form auf true setzen. Und im PreviewKeyDown Event sollte man die Pfeiltasten as Input-Key registrieren, damit sie überhaupt im KeyDown-Event landen.
e.IsInputKey = true;

Gruß grexit
Member: IT-Nuke
IT-Nuke Sep 11, 2015, updated at Sep 14, 2015 at 06:53:31 (UTC)
Goto Top
Okey danke,
das Event ist in der Control registriert darauf habe ich geachtet.
"man die Pfeiltasten as Input-Key registrieren" muss ich mir mal genauer anschauen.


__________________________________________________________________________________________________


Lösung:

konnte das Problem mit dem Code lösen

protected override bool ProcessDialogKey(Keys keyData)

Quellen:
https://social.msdn.microsoft.com/forums/vstudio/de-DE/1e9ec201-ab83-474 ...
https://msdn.microsoft.com/de-de/library/system.windows.forms.control.pr ...
http://blogs.msdn.com/b/jfoscoding/archive/2005/01/24/359334.aspx