[英]C# Progressbar is not updated accurately in Vista or Windows7
public partial class Form1 : Form
{
//....
private void timer1_Tick(object sender, EventArgs e)
{
if (this.progressBar1.Value >= 100)
{
this.timer1.Stop();
this.timer1.Enabled = false;
}
else
{
this.progressBar1.Value += 10;
this.label1.Text = Convert.ToString(this.progressBar1.Value);
}
}
//......
}
在这里,我使用计时器来更新进度条值。 它在XP中运行良好。 但是在Windows7或Vista中,当进度值设置为100但图形进度不是100时!
搜索一些线程发现其动画在Vista / Windows7中滞后。
怎么摆脱这个东西?
我不想使用以下方法来消除Vista / Window7的外观和感觉:
SetWindowTheme(progressBar1.Handle, " ", " ");
我有同样的问题。 Fozi的tipps帮助了我。 除非最大值(100%),否则Samir的解决方案将正常工作。 为了使这项工作也达到100%,必须在之前增加最大值。 以下对我来说很好。
if (NewValue < progressBar.Maximum)
{
progressBar.Value = NewValue + 1;
progressBar.Value--;
}
else
{
progressBar.Maximum++;
progressBar.Value = progressBar.Maximum;
progressBar.Value--;
progressBar.Maximum--;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (progressBar1.Maximum == 1) progressBar1.Maximum = 100;
if (progressBar1.Value==100) {
progressBar1.Value = 0;
return;
}
progressBar1.Increment(1);
if (progressBar1.Value == 100) {
progressBar1.Value = 1; progressBar1.Maximum = 1;
progressBar1.Update();
}
}
这些是我通过适当的全面绘制进度条来解决win7问题的技巧。
这就是愚蠢的进度条在Vista及其后的工作方式。
没有解决办法。
抱怨微软。
public partial class Form1 : Form
{
//....
private void timer1_Tick(object sender, EventArgs e)
{
if (this.progressBar1.Value >= 100)
{
this.timer1.Stop();
this.timer1.Enabled = false;
}
else
{
int tempValue = this.progressBar1.Value + 10;
if (tempValue < 100 && tempValue >=0 )
{
this.progressBar1.Value = tempValue + 1;
this.progressBar1.Value = tempValue;
}
else if (tempValue >= 100)
{
this.progressBar1.Value = 100;
this.progressBar1.Value = 99;
this.progressBar1.Value = 100;
}
this.label1.Text = Convert.ToString(this.progressBar1.Value);
}
}
//......
}
else部分使进度条现在看起来不错。 但是应该有一些标准的进度条方式。 这个想法是从Fozi的评论点击这里
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.