如何使用我的键移动graphics.Rectangle?

时间:2015-09-16 05:35:57

标签: c# graphics

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

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

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' key'由于某种原因未被承认?

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

1 个答案:

答案 0 :(得分:0)

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

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);
        }
    }
}