首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用计时器移动对象

使用计时器移动对象
EN

Stack Overflow用户
提问于 2017-03-15 16:12:07
回答 2查看 4K关注 0票数 1

我有一个对象,在窗体中有一个对角运动,初始位置是中心,当对象在窗体的角落时,我想停止运动,并将运动返回到初始位置,谢谢帮助,我有第一个运动,但我现在不知道如何返回。

代码语言:javascript
复制
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);
}
EN

回答 2

Stack Overflow用户

发布于 2017-03-15 16:18:18

timer2声明移出函数并放入表单中,如下所示:

代码语言:javascript
复制
public partial class Form1 : Form
{
    System.Windows.Forms.Timer timer2 = new System.Windows.Forms.Timer();

    public Form1()
    {
    }

Tick事件functionThread make方法中,使代码更易于阅读和维护

代码语言:javascript
复制
timer2.Tick += Timer2_Tick; 

Timer2_Tick方法中检查面板的位置并在必要时停止计时器

代码语言:javascript
复制
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);
}
票数 2
EN

Stack Overflow用户

发布于 2017-03-15 16:17:06

这段代码让面板从左到右,它的起始位置是10,10 (BasePoint),当它到达边缘时,它会将面板放回原来的位置,这样它就可以再次移动了。你也可以在命中这个布尔值后停止计时器,唯一的改变就是全局声明计时器,这个答案由:Nino提供

代码语言:javascript
复制
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;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42804225

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档