C# 定时器速度自动增加
我有以下代码。当我点击按钮picturebox时,从右到左,从上到下移动。当它移动到面板的末端时,它再次从右到左和从上到下开始。现在的问题是,在第一次完成picturebox后,从右到左计时器的速度逐渐增加,虽然我将其设置为200,但似乎此行myform.counterTop=myform.counterTop+5;值5也逐渐增大。在第一轮之后,它增加了一点,在第二轮之后,它增加了一点,并且继续这样。请告诉我为什么会这样C# 定时器速度自动增加,c#,winforms,C#,Winforms,我有以下代码。当我点击按钮picturebox时,从右到左,从上到下移动。当它移动到面板的末端时,它再次从右到左和从上到下开始。现在的问题是,在第一次完成picturebox后,从右到左计时器的速度逐渐增加,虽然我将其设置为200,但似乎此行myform.counterTop=myform.counterTop+5;值5也逐渐增大。在第一轮之后,它增加了一点,在第二轮之后,它增加了一点,并且继续这样。请告诉我为什么会这样 namespace Spaceship_Invaders {
namespace Spaceship_Invaders
{
public partial class Form1 : Form
{
private int invaderlanded = 0;
private int invaderstopped = 0;
private int counterfortop = -60;
private int counterforleft = 415;
private int counterTop = -60;
private int counterLeft = 415;
private bool pictureboxclicked = false;
private int timerinterval = 200;
System.Windows.Forms.Timer mytimer = new System.Windows.Forms.Timer();
public Form1()
{
InitializeComponent();
Image myImage = Image.FromFile("image/Untitled6.png");
pictureBox1.Image = myImage;
pictureBox1.Top = counterfortop;
pictureBox1.Left = counterforleft;
}
public class Spaceship
{
Form1 myform;
public Spaceship(Form1 form)
{
myform = form;
}
public void mspaceship()
{
myform.mytimer.Tick += new EventHandler(TimerEventProcessor);
myform.mytimer.Interval = myform.timerinterval;
myform.mytimer.Enabled = true;
myform.mytimer.Start();
}
private void TimerEventProcessor(Object myObject, EventArgs myEventArgs)
{
if (myform.pictureboxclicked)
{
myform.mytimer.Interval = 5;
myform.pictureBox1.Top = myform.counterTop;
//myform.pictureBox1.Left = myform.counterLeft;
myform.counterTop = myform.counterTop - 5;
if (myform.counterTop <-60)
{
//myform.pictureBox1.Enabled = false;
//myform.pictureBox1.Hide();
myform.pictureboxclicked = false;
myform.mytimer.Interval = myform.timerinterval;
myform.counterLeft = 415;
myform.counterTop = -60;
myform.mytimer.Stop();
}
} else {
if (myform.counterTop > 370 || myform.counterLeft < 1)
{
//myform.pictureBox1.Enabled = false;
//myform.pictureBox1.Hide();
myform.invaderlanded++;
myform.textBox2.Text = myform.invaderlanded.ToString();
myform.counterLeft = 415;
myform.counterTop = -60;
myform.pictureboxclicked = false;
myform.mytimer.Interval = myform.timerinterval;
myform.mytimer.Stop();
} else {
myform.pictureBox1.Top = myform.counterTop;
myform.pictureBox1.Left = myform.counterLeft;
myform.counterTop = myform.counterTop + 5;
myform.counterLeft = myform.counterLeft - 5;
}
}
}
}
private void button4_Click(object sender, EventArgs e)
{
Spaceship myspaceship = new Spaceship(this);
myspaceship.mspaceship();
}
namespace Spaceship\u入侵者
{
公共部分类Form1:Form
{
私有int Inventerlanded=0;
私有int=0;
私有int-counterfortop=-60;
私有int-counterforleft=415;
私人int台面=-60;
专用int计数器左=415;
private bool pictureboxclicked=false;
专用int timerinterval=200;
System.Windows.Forms.Timer mytimer=新的System.Windows.Forms.Timer();
公共表格1()
{
初始化组件();
Image myImage=Image.FromFile(“Image/Untitled6.png”);
pictureBox1.Image=myImage;
图B1.Top=反端口;
图B1.左=对向左;
}
公共级宇宙飞船
{
表格1我的表格;
公共宇宙飞船(表格一)
{
我的形式=形式;
}
公共空间
{
myform.mytimer.Tick+=新事件处理程序(TimerEventProcessor);
myform.mytimer.Interval=myform.timerinterval;
myform.mytimer.Enabled=true;
myform.mytimer.Start();
}
私有void TimerEventProcessor(对象myObject,事件参数MyEventTargets)
{
if(myform.pictureboxclicked)
{
myform.mytimer.Interval=5;
myform.pictureBox1.Top=myform.counterTop;
//myform.pictureBox1.Left=myform.counterLeft;
myform.counterTop=myform.counterTop-5;
if(myform.counterTop 370 | | myform.counterLeft<1)
{
//myform.pictureBox1.Enabled=false;
//myform.pictureBox1.Hide();
myform.investrlanded++;
myform.textBox2.Text=myform.investrlanded.ToString();
myform.counterLeft=415;
myform.counterTop=-60;
myform.pictureboxclicked=false;
myform.mytimer.Interval=myform.timerinterval;
myform.mytimer.Stop();
}否则{
myform.pictureBox1.Top=myform.counterTop;
myform.pictureBox1.Left=myform.counterLeft;
myform.counterTop=myform.counterTop+5;
myform.counterLeft=myform.counterLeft-5;
}
}
}
}
私有无效按钮4_单击(对象发送者,事件参数e)
{
太空船myspaceship=新太空船(本);
mspaceship();
}
每次调用mspaceship()
,都会向计时器添加另一个事件处理程序
第二次单击时,有两个事件处理程序,每个处理程序移动5像素
相反,您应该只添加一次处理程序。每次调用
mspaceship()
,您都会向计时器添加另一个事件处理程序
第二次单击时,有两个事件处理程序,每个处理程序移动5像素
相反,您应该只添加一次处理程序。myspaceship()
是一个非常糟糕的函数名。函数名应该是大写动词。myspaceship()
是一个非常糟糕的函数名。函数名应该是大写动词。