如何移动图形.矩形和我的钥匙

本文关键字:我的 钥匙 图形 何移动 移动 | 更新日期: 2023-09-27 18:12:51

我很简单地尝试移动我从图形类中绘制的矩形,根据按下的键上下移动。然而,我不知道如何移动图形对象,但主要是表单组件。

这是我的代码到目前为止,但我不确定我应该怎么做。

private Graphics paddle1;
    public void Move(Keys key)
    {
        switch (key)
        {
            case Keys.W:
                paddle1.Top -= 20;
                break;
        }
    }

我已经将我的图形对象命名为'paddle1',我不能简单地使用。top来获取图形矩形的位置。

还有别的方法吗?

编辑:

我用另一种方法绘制矩形:

    public void Draw()
    {
        paddle1.FillRectangle(brush, position.X, position.Y, 20, 100);
    }

我使用一个控制器类来绘制桨,然后移动它。变量键' Key '由于某种原因无法识别?

    public void Run()
    {
        paddle1.Move(Keys key); //This is unrecognized from my paddle class.
        paddle1.Draw();

如何移动图形.矩形和我的钥匙

下面是一些示例代码,允许您使用箭头键移动矩形。目前,它错过了一些边界检查,但它应该给你一个很好的起点。

public partial class Form1 : Form
{
    private Rectangle _SelectedArea;
    public Form1()
    {
        InitializeComponent();
        _SelectedArea = new Rectangle(0, 0, 20, 20);
    }
    protected override void OnKeyDown(KeyEventArgs e)
    {
        base.OnKeyDown(e);
        if (!e.Handled)
        {
            switch (e.KeyData)
            {
                case Keys.Down:
                    _SelectedArea.Offset(0, 1);
                    break;
                case Keys.Up:
                    _SelectedArea.Offset(0, -1);
                    break;
                case Keys.Left:
                    _SelectedArea.Offset(-1, 0);
                    break;
                case Keys.Right:
                    _SelectedArea.Offset(1, 0);
                    break;
            }
            e.Handled = true;
            // The Invalidate() call causes the control to be redrawn.
            // Check https://msdn.microsoft.com/en-us/library/598t492a.aspx
            Invalidate();
        }
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);
        using (var pen = new Pen(Color.Red))
        using (var brush = new HatchBrush(HatchStyle.Percent10, Color.Blue, Color.Transparent))
        {
            e.Graphics.FillRectangle(brush, _SelectedArea);
            e.Graphics.DrawRectangle(pen, _SelectedArea);
        }
    }
}