【问题标题】:Why does my Picture Box move to the top of the form?为什么我的图片框会移到表单顶部?
【发布时间】:2017-10-16 17:25:03
【问题描述】:

所以在我的程序中,我希望一个对象根据按下的箭头键向左或向右移动。我移动了它们底部的图片框,所以当按下两个箭头键中的任何一个时,它们会沿着底部移动。但是发生的情况是,当我按下任一键时,图片框都会移到顶部并在此处左右移动。我不知道这是为什么。

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



            }
        }


    }
}

}

【问题讨论】:

  • 一个点通常需要 2 个参数。如果你不通过第二个,它显然默认为 0。y = 0 是你的窗口窗体的顶部。将您的新点更改为new Point(pictureBox1.Left +/- 1, pictureBox1.Top)

标签: c# winforms picturebox


【解决方案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。

【讨论】:

  • 感谢您的建议,我怀疑它出了什么问题,您让我放心!
猜你喜欢
  • 1970-01-01
  • 2012-11-26
  • 2013-12-25
  • 2013-12-16
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
相关资源
最近更新 更多