我有一个对象,在窗体中有一个对角运动,初始位置是中心,当对象在窗体的角落时,我想停止运动,并将运动返回到初始位置,谢谢帮助,我有第一个运动,但我现在不知道如何返回。
public void functionThread()
{
var timer2 = new Timer();
timer2.Interval = 50;
timer2.Enabled = true;
timer2.Tick += (s, e) => panel1.Location = new Point(panel1.Location.X - 5, panel1.Location.Y - 5);
}发布于 2017-03-15 16:18:18
将timer2声明移出函数并放入表单中,如下所示:
public partial class Form1 : Form
{
System.Windows.Forms.Timer timer2 = new System.Windows.Forms.Timer();
public Form1()
{
}在Tick事件functionThread make方法中,使代码更易于阅读和维护
timer2.Tick += Timer2_Tick; 在Timer2_Tick方法中检查面板的位置并在必要时停止计时器
private void Timer2_Tick(object sender, EventArgs e)
{
if (panel1.Left == 0 || panel1.Top == 0)
{
timer2.Stop();
}
else
panel1.Location = new Point(panel1.Location.X - 5, panel1.Location.Y - 5);
}发布于 2017-03-15 16:17:06
这段代码让面板从左到右,它的起始位置是10,10 (BasePoint),当它到达边缘时,它会将面板放回原来的位置,这样它就可以再次移动了。你也可以在命中这个布尔值后停止计时器,唯一的改变就是全局声明计时器,这个答案由:Nino提供
bool HitEdge = false;
Point BasePoint = new Point(10,10);
Timer timer2 = new Timer();
public void functionThread()
{
timer2.Interval = 50;
timer2.Enabled = true;
timer2.Tick += timer2_Tick;
}
private void timer2_Tick(object sender, EventArgs e)
{
if((panel1.Left + panel1.Width) >= this.Width)
{
HitEdge = true;
}
if (!HitEdge )
{
panel1.Left += 15;
}
else
{
panel1.Location = BasePoint;
HitEdge = false;
}
}https://stackoverflow.com/questions/42804225
复制相似问题