int millisecondi = 0;
public Form1()
{
InitializeComponent();
player.Top = screen.Height - player.Height;
player.BackgroundImage = Properties.Resources.stand;
if (mario)
{
label1.Text = "Mario";
}
progressBar1.Minimum = 0;
progressBar1.Maximum = 100;
progressBar1.Value = 100;
}
private void timer1_Tick(object sender, EventArgs e)
{
index++;
//replay gif
millisecondi++;
if (millisecondi == 1000)
{
progressBar1.Value = progressBar1.Value - 1;
if (progressBar1.Value <= 0)
{
MessageBox.Show("Sei Morto");
}
}
}
问题在于timer1_Tick。 它会自动启用,其间隔为1毫秒。
每秒我都希望进度条为“Progressbar value - 1”。 当它达到0时,我希望它说“你死了”。
它在1秒后进入此循环,但它不起作用:
if (millisecondi == 1000)
{
progressBar1.Value = progressBar1.Value - 1;
if (progressBar1.Value <= 0)
{
MessageBox.Show("Sei Morto");
}
}
答案 0 :(得分:1)
计时器滴答一次,然后停止:要使其不断打勾,请将Tick
事件更改为:
private void timer1_Tick(object sender, EventArgs e)
{
index++;
millisecondi++;
timer1.Stop();
if (millisecondi == 1000)
{
progressBar1.Value = progressBar1.Value - 1;
if (progressBar1.Value <= 0)
{
MessageBox.Show("Sei Morto");
}
}
else
{
timer1.Start(); // will 'retick' if millisecondi != 1000
}
}
答案 1 :(得分:0)
正如您所提到的,代码执行到达if (millisecondi == 1000)
,那么执行方案就不会出现任何问题,因此您应该注意以下其他事项:
计时器名称空间:确保您的计时器名称空间为 System.Windows.Forms.Timer
如果可以,那么你的代码看起来对我来说是正确的,但如果你仍然遇到这个问题,请尝试这个代码:
index++;
//replay gif
millisecondi++;
if (millisecondi == 1000)
{
if (progressBar1.InvokeRequired)
{
progressBar1.Invoke((MethodInvoker)
delegate
{
progressBar1.Value = progressBar1.Value - 1;
}
);
}
else
{
progressBar1.Value = progressBar1.Value - 1;
}
if (progressBar1.Value <= 0)
{
MessageBox.Show("Sei Morto");
}
}