Buttony i obsługa Keydown "Gryzą się"

0

Witam, piszę prostą aplikację w C# za pomocą klawiszy strzałek mam przesuwać pictureBox1, na formie znajduje się też kilka labeli i buttonów.

Obsługa klawiszy wygląda mniejwięcej tak:

 
private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Down)
            {
                foreach (var item in listamap)
                {
                    item.obraz.Top -= 10;
                }
            }
            if (e.KeyCode == Keys.Up)
            {
                foreach (var item in listamap)
                {
                    item.obraz.Top += 10;
                }
            }
            if (e.KeyCode == Keys.Left)
            {
                foreach (var item in listamap)
                {
                    item.obraz.Left += 10;
                }
            }
            if (e.KeyCode == Keys.Right)
            {
                foreach (var item in listamap)
                {
                    item.obraz.Left -= 10;
                }
            }

            pictureBox1.Top = listamap[2].obraz.Top;
            pictureBox1.Left = listamap[2].obraz.Left;
            pictureBox1.Refresh();

        }

i takie przesuwanie działa dopóki nie klikniemy w któregoś buttona. wtedy sterowanie klawiszami przestaje działać.
W internecie znalazłem inną metodę:

 
        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData.Equals(Keys.Escape))
            {
                Application.Exit();
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }

działa to dla np: escape, enter ale nie dla strzałek, ktoś potrafi rozwiązać ten problem?
Pozdrawiam
Chotkos

1

problem jest z focusem, jak klikniesz przycisk to dostaje focus i do niego trafiają klawisze, a nie do formy.
zobacz czy form.KeyPreview=true coś daje.

0

a gdzie dokładnie umieścić to co napisałeś?
ma być dokładnie tak jak napisałeś czy
Form1.KeyPreview=true; ( moja forma nazywa się Form1) ;) dzięki za szybką pomoc ;)

[edit]
dodałem
this.KeyPreview = true;
do public Form1()
{
...
}
niestety nie pomogło :/

1

Hmm jezeli form ma metode onSelectionChange czy cos podobnego sproboj zrobic tak aby po zmianie zaznaczenia z forma na cos innego zaznaczenie wrocilo na forma. Lub w buttonie onClick na samym koncu daj select form1. Man nadzieje ze czaisz co kombinuje :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1