2017-02-08 2 views
0
public partial class dload : Form 
{ 
    public dload() 
    { 
     InitializeComponent(); 
    } 

    private void dload_Load(object sender, EventArgs e) 
    { 
     label1.Visible = false; 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     int i = 0; 
     progressBar1.Minimum = 0; 
     progressBar1.Maximum = 5000; 
     for (i = 0; i <= 5000; i++) 
     { 
      progressBar1.Value = i; 
      if (i == 5000) 
      { 
       label1.Visible = true; 
      } 

     } 
    } 
} 

Проблема заключается в том, что метка отображается до завершения рабочего шага. Как сделать отображение этикеток только после того, как индикатор выполнения полностью завершен?Нужна помощь по исправлению индикатора выполнения

Чтобы добавить дополнительную информацию, потому что сайт не разрешит ее, я попытался изменить максимальные значения на большее число, но это не сработало.

+0

Во-первых, ваш цикл будет работать только 5000. Вам не нужно 'if' внутри цикла. Удалите предложение while и поставьте 'label1.Visible = true;' под цикле. Теперь, в вашем случае, progressbar завершен, но пользовательский интерфейс еще не обновил его. Я думаю, вы могли бы поставить 'progressBar1.Refresh()' после обновления значения. _edit_ Просто запустил этот код и понял, что вы имеете в виду. Это странно. Нужно исследовать и возвращаться к вам – bixarrio

+0

Почему бы вам не установить 'label1.Visible = true;' после цикла 'for'? – Philippe

+0

Вам не нужен оператор if. Просто переместите label1.Visible после цикла. – frostbyte

ответ

1

Это проблема с анимацией. А «взломать» вокруг него, чтобы реально уменьшить значение прогресса на 1:

progressBar1.Minimum = 0; 
progressBar1.Maximum = 5000; 
for (int i = 0; i < progressBar1.Maximum; i++) { 
    progressBar1.Value = i; 
    progressBar1.Value = Math.Max(i - 1, progressBar1.Minimum); 
} 
label1.Visible = true; 
Смежные вопросы