georgebaker Ответов: 1

Как перемещать формы с помощью клавиш вверх, вниз, влево и вправо?


Я просто хочу перемещать форму по экрану с помощью стрелок на клавиатуре.

Что я уже пробовал:

Сначала я попробовал строки, которые я закомментировал, а затем я попробовал другой код ниже, но ничего не происходит ни с одним из решений, которые я пробовал.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace SC1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left) { this.Left += e.X - lastPoint.X; this.Top += e.Y - lastPoint.Y; }
        }

        Point lastPoint;
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            lastPoint = new Point(e.X, e.Y);
        }

        //Move form to the Right
        //private void RightButton_Click(object sender, EventArgs e)
        //{
        //    this.Location = new Point(this.Location.X + 10, this.Location.Y);
        //}
        
        //Move form to the left:
        //private void LeftButton_Click(object sender, EventArgs e)
        //{
        //     this.Location = new Point(this.Location.X - 10, this.Location.Y);
        //}
  
        //Move form up:
        //private void UpButton_Click(object sender, EventArgs e)
        //{
        //     this.Location = new Point(this.Location.X, this.Location.Y - 10);
        //}  

        //Move form down:
        //private void DownButton_Click(object sender, EventArgs e)
        //{
        //    this.Location = new Point(this.Location.X, this.Location.Y + 10);
        //}

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            //capture up arrow key
            if (keyData == Keys.Up)
            {
                MessageBox.Show("You pressed Up arrow key");
                return true;
            }
            //capture down arrow key
            if (keyData == Keys.Down)
            {
                MessageBox.Show("You pressed Down arrow key");
                return true;
            }
            //capture left arrow key
            if (keyData == Keys.Left)
            {
                MessageBox.Show("You pressed Left arrow key");
                return true;
            }
            //capture right arrow key
            if (keyData == Keys.Right)
            {
                MessageBox.Show("You pressed Right arrow key");
                return true;
            }
            return base.ProcessCmdKey(ref msg, keyData);
        }
    }
}

1 Ответов

Рейтинг:
5

OriginalGriff

Попробуй:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
    if (keyData == Keys.Up)
        {
        Top -= 20;
        return true;
        }
    if (keyData == Keys.Down)
        {
        Top += 20;
        return true;
        }
    if (keyData == Keys.Left)
        {
        Left -= 20;
        }
    if (keyData == Keys.Right)
        {
        Left += 20;
        return true;
        }
    return base.ProcessCmdKey(ref msg, keyData);
    }


OriginalGriff

Если это хорошо работает для меня!

Вы уверены, что он показывает правильную форму?
Есть ли у него фокус?

Глупый вопрос, я знаю, но... он компилировался без ошибок или предупреждений?

georgebaker

Он отлично работает. Это я поступаю неправильно.

Я использовал кнопки на форме, а не клавиши клавиатуры, чтобы проверить ее. Глупо я знаю ;-)

OriginalGriff

У всех нас бывают такие дни! (Иногда у меня бывают целые * недели*! :румянец:)

georgebaker

Ха-ха-ха. Да :)