调用 timer1_tick 时进度条不更改值
Progress bar not changing value when timer1_tick is invoked
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 时,我希望它说 "You died".
1秒后进入这个循环,就是不行:
if (millisecondi == 1000)
{
progressBar1.Value = progressBar1.Value - 1;
if (progressBar1.Value <= 0)
{
MessageBox.Show("Sei Morto");
}
}
正如您提到的代码执行达到 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");
}
}
计时器滴答一次然后停止:要使其持续滴答,请将 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
}
}
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 时,我希望它说 "You died".
1秒后进入这个循环,就是不行:
if (millisecondi == 1000)
{
progressBar1.Value = progressBar1.Value - 1;
if (progressBar1.Value <= 0)
{
MessageBox.Show("Sei Morto");
}
}
正如您提到的代码执行达到 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");
}
}
计时器滴答一次然后停止:要使其持续滴答,请将 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
}
}