2010-04-06 3 views
3
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!C# Progressbar не обновляется точно в Vista или Windows7

Поиск в некоторых потоках, найденных для задержки анимации в Vista/Windows7.

Как избавиться от этой вещи?

Я не хочу потерять внешний вид Vista/Window7 с помощью:

SetWindowTheme(progressBar1.Handle, " ", " "); 
+0

Что вы видите вместо этого? Он работает так, как ожидалось для меня ... –

+1

Метка, показывающая прогресс = 100%, что закончено! Но индикатор прогресса все еще кажется 80% или 90%. Не то, что мы хотим, не так ли? – Samir

+0

Я предполагаю, что вы используете Windows Forms здесь (поскольку в вашем коде нет ссылки Dispatcher), и я должен согласиться с codeka, это работает как шарм здесь ... Нам понадобится дополнительная информация – TimothyP

ответ

0
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);     
    } 
    } 

//...... 
} 

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

1

Это просто как тупые баре прогресса работать в Vista, и позже.

Исправить не удалось.

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

+0

Почему downvote? – leppie

+1

Я думаю, они downvoted ваши комментарии не являются полезными, insightfull или respectfull Если есть такая ошибка, разработчики @ microsoft, вероятно, помогут, если вы новичок, с кем связаться. Я просто протестировал это на работе с окнами 7, например, шарм – TimothyP

+0

@TimothyP - нет там _is_ lag ... т. Е. Обновление индикатора выполнения за реальным временем. Если значение обновляется медленно, его штраф, но если значение быстро обновляется, бар уступает место. – timfoden

2

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

if (NewValue < progressBar.Maximum) 
{ 
    progressBar.Value = NewValue + 1; 
    progressBar.Value--; 
} 
else 
{ 
    progressBar.Maximum++; 
    progressBar.Value = progressBar.Maximum; 
    progressBar.Value--; 
    progressBar.Maximum--; 
} 
1
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 с надлежащей полномасштабной краской ProgressBar.

Смежные вопросы