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-ID: 282598

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

Ausgedruckt am: 25.11.2024 um 23:11 Uhr

122990
122990 11.09.2015 aktualisiert um 11:16:07 Uhr
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
IT-Nuke
IT-Nuke 11.09.2015, aktualisiert am 14.09.2015 um 08:53:31 Uhr
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