【问题标题】:moving a button using a timer使用计时器移动按钮
【发布时间】:2012-08-02 15:27:15
【问题描述】:

我有四个按钮,分别称为“ship1,ship2”等。 我希望它们移动到表格的右侧(以相同的速度并同时开始),并且每次我点击一个“船”时,所有的船都应该停止。

我知道我需要使用计时器(我编写了使用线程的代码,但是在停止船只时给我带来了麻烦。)我不知道如何使用计时器。

我试图阅读 MDSN 中的计时器信息,但我不明白。 那你能帮帮我吗?

这里是使用线程的代码。 我不想使用它。我需要使用定时器! (我在这里发布它是因为它不让我在没有任何代码的情况下发布

    private bool flag = false;
    Thread thr;
    public Form1()
    {
        InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
        flag = false;
        thr = new Thread(Go);
        thr.Start();

    }

    private delegate void moveBd(Button btn);

    void moveButton(Button btn)
    {
        int x = btn.Location.X;
        int y = btn.Location.Y;
        btn.Location = new Point(x + 1, y);
    }

    private void Go()
    {
        while (((ship1.Location.X + ship1.Size.Width) < this.Size.Width)&&(flag==false))
        {
            Invoke(new moveBd(moveButton), ship1);
            Thread.Sleep(10);
        }

        MessageBox.Show("U LOOSE");

    }

    private void button1_Click(object sender, EventArgs e)
    {
        flag = true;
    }

【问题讨论】:

  • 这似乎是家庭作业\作业。如果是,我会更新你的标签。
  • 哇。您将无法单击这样的按钮。您正在阻塞作为 UI 线程的主线程。将 timer 与经过的事件一起使用。问题是除非你有一个非常短的Interval,比如 0.04 秒(25 FPS),否则你不会得到流畅的运动。如果您正在制作游戏,请查看XNA
  • @zeencat 不是。我正在尝试开发一款游戏。
  • 如果您正在构建游戏,我可以推荐 XNA 而非 WinForms 应用程序吗?这将使构建这款游戏变得更加容易

标签: c# forms button timer


【解决方案1】:

你搜索过Windows.Forms.Timer吗?

您可以通过以下方式启动计时器:

Timer timer = new Timer();

timer.Interval = 1000; //one second
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;
timer.Start();

您需要一个事件处理程序来处理 Elapsed 事件,您将在其中放置代码来处理移动“按钮”:

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)  
{
      MoveButton();       
}

【讨论】:

  • System.Windows.Forms.Timer 在这里是一个更好的选择,否则在 Timer_Elapsed 事件上几乎不可避免地检查 InvokeRequired 以避免跨线程异常。否则同意。
  • @Duane 当我想让它停止移动时,我该如何停止时钟?
  • timer.Stop();或timer.Enabled = false;
猜你喜欢
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多