C # Progressbar не обновляется точно в Vista или Windows7 - PullRequest
3 голосов
/ 06 апреля 2010
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, " ", " ");

Ответы [ 4 ]

2 голосов
/ 07 марта 2011

У меня была такая же проблема.Чаевые Фози помогали мне.Решение от Самира будет нормально работать, если не максимум (100%).Чтобы сделать эту работу еще и на 100%, максимум надо предварительно увеличить.Следующее работало хорошо для меня.

if (NewValue < progressBar.Maximum)
{
  progressBar.Value = NewValue + 1;
  progressBar.Value--;
}
else
{
  progressBar.Maximum++;
  progressBar.Value = progressBar.Maximum;
  progressBar.Value--;
  progressBar.Maximum--;
}
1 голос
/ 18 сентября 2012
  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 с помощью правильной полноразмерной краски индикатора выполнения.

1 голос
/ 06 апреля 2010

Это просто, как глупые индикаторы выполнения работают в Vista и позже.

Исправления нет.

Пожаловаться на Microsoft.

0 голосов
/ 06 апреля 2010
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);                
    }
  }

//......
}

В остальной части индикатор выполнения теперь выглядит нормально. Но должен быть какой-то стандартный способ для индикаторов прогресса. Идея взята из комментария Фози здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...