为什么我的Picture Box移到表单的顶部?

时间:2017-10-16 17:25:03

标签: c# winforms picturebox

所以在我的程序中,我希望一个对象向左或向右移动,具体取决于按住箭头键的方式。我移动了它们底部的图片框,所以当按下任意两个箭头键时,它们会沿着底部移动。但是当我按任意键时,图片框会移到顶部并在那里左右移动。我不知道为什么会这样。

这是Form1的代码,忽略Form2的代码;那是为了实验目的:

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 Move
{
public partial class Form1 : Form
{
    public int lives = 0;

    Form2 menu = new Form2();
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_KeyDown(object sender, KeyEventArgs e)
    {

    }

    private void pictureBox1_Click(object sender, EventArgs e)
    {

    }

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        int i;

        for (i = 0; i < 500; i++)
        {

            if (e.KeyCode == Keys.Left)
            {
                pictureBox1.Location =  new Point(pictureBox1.Left - 1);
                Application.DoEvents();
                System.Threading.Thread.Sleep(10);
            }

            if (e.KeyCode == Keys.Right)
            {
                pictureBox1.Location = new Point(pictureBox1.Left + 1);
                Application.DoEvents();
                System.Threading.Thread.Sleep(10);
            }

            var rect1 = new System.Drawing.Rectangle(pictureBox1.Location, pictureBox1.Size);
            var rect2 = new System.Drawing.Rectangle(pictureBox2.Location, pictureBox2.Size);

            if (rect1.IntersectsWith(rect2))
            {
                MessageBox.Show("Game Over!");
                System.Threading.Thread.Sleep(1000);
                Application.Exit();
            }


            if (e.KeyCode == Keys.Down)
            {
                this.Hide();
                menu.Show();



            }
        }


    }
}

}

1 个答案:

答案 0 :(得分:1)

使用

pictureBox1.Location =  new Point(pictureBox1.Left - 1, pictureBox1.Top);

pictureBox1.Location = new Point(pictureBox1.Left + 1, pictureBox1.Top);

分别指定当前使用的Y坐标。

当使用仅占用一个值的Point构造函数时,系统期望这一个值包含X和Y坐标(作为值的高低字)并且将使用0作为Y坐标,因为您使用的X值太低,以至于该值的较高字为0。