none
Перемещение картинки в PictureBox RRS feed

  • Вопрос

  • Добрый день!

    Интересует следующий момент: Есть форма с контролами и picturebox. Рисуем с помощью события Piturebox_paint кружок. Как с помощью стрелок на клавиатуре можно перемещать этот кружок не прибегая к WinAPI?

Ответы

Все ответы

  • Добрый вечер!

    Сохраняйте координаты расположения вашего кружка в полях класса, и при вызове DrawEllipse  в  Piturebox_paint используйте их. Так же вам потребуется обработать событие KeyDown формы, и по нажатию соответствующей стрелки, изменяйте координаты и делайте вызов метода Invalidate элемента управления PictureBox. Вот пример:

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
                x = Width / 2;
                y = Height / 2;
            }
    
            int x;
            int y;
    
            private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.DrawEllipse(Pens.Red, x, y, 50, 50);
            }
    
            private void Form1_KeyDown(object sender, KeyEventArgs e)
            {
                switch (e.KeyCode)
                {
                    case Keys.Left:
                        x-=10;
                        pictureBox1.Invalidate();
                        break;
    
                    case Keys.Right:
                        x+=10;
                        pictureBox1.Invalidate();
                        break;
    
                    // top, down
    
                    default:
                        break;
                }
            }
        }

  • Дмитрий!

    Я рассмотрел предложенный вариант, но...

    как известно сам picturebox не имеет фокуса. фокус на самой form1 при наличии дополнительных контролов ( например numericupdown ) и загрузки в picturebox картинки улетает в различные контролы, при этом событие form1_keydown не вызывается :(

  • Посмотрите метод ProcessDialogKey
  • Решил проблему немного сжулив...переиграл стрелки на wasd - они не сбивают фокус и через form1_keypress все работает
    • Помечено в качестве ответа Alexander2106 8 мая 2013 г. 18:09
  • Влезу со своим советом.

    Компонент PictureBox является довольно "тяжёлым", и предназначен он для работы с растровыми изображениями. Если нужно просто рисовать что-то, то лучше использовать Panel.