C# 为什么我的图片框会移到表单的顶部?

C# 为什么我的图片框会移到表单的顶部?,c#,winforms,picturebox,C#,Winforms,Picturebox,因此,在我的程序中,我希望一个对象根据按下的箭头键向左或向右移动。我移动了表格底部的图片框,这样当按下两个箭头键中的任何一个时,它们都会沿着底部移动。但当我按下任意一个键时,图片框就会转到顶部,并在那里左右移动。我不知道这是为什么 这是Form1的代码,忽略Form2的代码;这是为了现在的实验目的: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usi

因此,在我的程序中,我希望一个对象根据按下的箭头键向左或向右移动。我移动了表格底部的图片框,这样当按下两个箭头键中的任何一个时,它们都会沿着底部移动。但当我按下任意一个键时,图片框就会转到顶部,并在那里左右移动。我不知道这是为什么

这是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();



            }
        }


    }
}

}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows.Forms;
名称空间移动
{
公共部分类Form1:Form
{
公共生活指数=0;
Form2菜单=新Form2();
公共表格1()
{
初始化组件();
}
私有void按钮1\u KeyDown(对象发送方,KeyEventArgs e)
{
}
私有无效图片单击(对象发送方,事件参数e)
{
}
私有void Form1\u KeyDown(对象发送方,KeyEventArgs e)
{
int i;
对于(i=0;i<500;i++)
{
if(e.KeyCode==Keys.Left)
{
pictureBox1.Location=新点(pictureBox1.Left-1);
Application.DoEvents();
系统线程线程睡眠(10);
}
if(e.KeyCode==Keys.Right)
{
pictureBox1.位置=新点(pictureBox1.左+1);
Application.DoEvents();
系统线程线程睡眠(10);
}
var rect1=新系统.绘图.矩形(pictureBox1.Location,pictureBox1.Size);
var rect2=新系统.Drawing.Rectangle(pictureBox2.Location,pictureBox2.Size);
if(rect1.与(rect2)相交)
{
MessageBox.Show(“游戏结束!”);
系统线程线程睡眠(1000);
Application.Exit();
}
if(e.KeyCode==Keys.Down)
{
this.Hide();
menu.Show();
}
}
}
}
}
使用

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


当使用只取一个值的
点的构造函数时,系统希望这一个值同时包含X和Y坐标(作为值的高和低单词)并且将使用0作为Y坐标,因为您使用的X值太低,因此该值的较高单词为0。

一个点通常有两个参数。如果不通过第二个,它显然默认为0。y=0是windows窗体的顶部。将您的新点更改为
新点(pictureBox1.Left+/-1,pictureBox1.Top)
。感谢您的建议,我对它的问题表示怀疑,您让我放心!
pictureBox1.Location =  new Point(pictureBox1.Left - 1, pictureBox1.Top);
pictureBox1.Location = new Point(pictureBox1.Left + 1, pictureBox1.Top);