我试图创建一个Windows窗体应用程序,其中矩形顺时针移动。这是图像。
这是我的代码。
public partial class Form1 : Form
{
int x;
int y;
public Form1()
{
InitializeComponent();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.FillRectangle(Brushes.Crimson, x, y, 20, 20);
}
private void movingTimer_Tick(object sender, EventArgs e)
{
while (true)
{
if (x < 750)
{
x += 5;
}
else if (x == 750 && y < 340)
{
y += 5;
}
break;
}
Invalidate();
}
}
我明白为什么我不能走得更远。如果我使用 x - = 5 创建新的if语句,它将与while循环同时激活。 我无法理解的是如何分隔新命令( x - = 5 和 y - = 5 < / strong>)所以只有在我的第一个while循环结束后才会激活它。
答案 0 :(得分:2)
好的,我想我明白了。我是这样做的。
while (true)
{
if (x < 750 && y == 0)
{
x += 5;
}
else if (x == 750 && y < 340)
{
y += 5;
}
else if (x > 0 && y >= 340)
{
x -= 5;
}
else if (x == 0 && y > 0)
{
y -= 5;
}
break;
}
但我觉得有一种更简单优雅的方法可以做到这一点。任何人都可以提出更好的建议吗?
答案 1 :(得分:2)
由于我不知道你想从哪里去,我会为你提供最直观的解决方案:
if (y <= 0 && x < 750)
{
x += 5;
}
else if (x == 750 && y < 340)
{
y += 5;
}
else if (y >= 340 && x > 0)
{
x-=5;
}
else if (y > 0 && x <= 0)
{
y-=5;
}
break;
你可能需要稍微调整一下这些值,但我想你可以从这里弄明白。
答案 2 :(得分:2)
由于您使用的是计时器,因此不需要while循环,也不要在if语句中检查常量值,因为如果更改表单大小,这些值将不起作用。
使用以下代码:
private void movingTimer_Tick(object sender, EventArgs e)
{
if (y <= 0 && x < this.ClientSize.Width-20)
{
x += 5;
y = 0;
}
if (x >= this.ClientSize.Width - 20 && y< this.ClientSize.Height-20)
{
x = this.ClientSize.Width - 20;
y += 5;
}
if(y>= this.ClientSize.Height -20)
{
x -= 5;
y = this.ClientSize.Height - 20;
}
if (x <=0 && y >0)
{
x = 0;
y -= 5;
}
Invalidate();
}