Продвижение прогресса бара в соответствии с функцией form_Load () - PullRequest
0 голосов
/ 29 октября 2019

В моем окне есть индикатор выполнения, который я хотел бы продвигать во время функции Form1_Load ()

То есть в начале этого он находится в 0 и когда мы добираемся до концаэтой функции я хотел бы знать, какой прогресс достигается.

Я пробовал это, но индикатор выполнения не изменяет значение моего индикатора выполнения в соответствии с кодом, а только в конце

    private void Window_Shown(object sender, EventArgs e)
    {
        ///
        /// CHARGEMENT DE TOUTE LES MOTS 
        ///
        progressBarLoad.Value = 0;

        //Code...

        progressBarLoad.Value = 100; //end of the code

    }

Это возможно?

Спасибо.

1 Ответ

0 голосов
/ 29 октября 2019
Событие

Form Load наступает раньше Shown, поэтому пользователь ничего не увидит ...

Вы можете поместить код в событие Shown.

Или вы можете поместить панель в виде всплеска, который вы создадите и отобразите в Load.

Чтобы инициализировать полосу, используйте свойство Step, чтобы определить приращение, и Maximum, чтобы определить количество шагов.

Следующее использование PerformStep() между шагами с Refresh.

Пример в событии Shown:

progressBarLoad.Value = 0;
progressBarLoad.Maximum = 5;
progressBarLoad.Step = 1;
progressBarLoad.Refresh();
Init1();
progressBarLoad.PerformStep();
progressBarLoad.Refresh();
Init2();
progressBarLoad.PerformStep();
progressBarLoad.Refresh();
Init3();
progressBarLoad.PerformStep();
progressBarLoad.Refresh();
Init4();
progressBarLoad.PerformStep();
progressBarLoad.Refresh();
Init5();
progressBarLoad.PerformStep();
progressBarLoad.Refresh();

Используя форму-всплеск, создайте для примера aПоле FixedSingle с ShowInTaskBar ложным и FormBorderStyle ложным и StartPosition центральным экраном. Поставьте бар с Modifiers как внутренний или публичный. Таким образом, вы можете управлять им из события Load:

var splash = new SplashForm();
splash.progressBarLoad.Value = 0;
splash.progressBarLoad.Maximum = 5;
splash.progressBarLoad.Step = 1;
splash.Show();
Init1();
splash.progressBarLoad.PerformStep();
splash.progressBarLoad.Refresh();
Init2();
splash.progressBarLoad.PerformStep();
splash.progressBarLoad.Refresh();
Init3();
splash.progressBarLoad.PerformStep();
splash.progressBarLoad.Refresh();
Init4();
splash.progressBarLoad.PerformStep();
splash.progressBarLoad.Refresh();
Init5();
splash.progressBarLoad.PerformStep();
splash.progressBarLoad.Refresh();
splash.Close();

Вы можете рефакторинг, используя метод DoProgress:

void DoProgress()
{
  splash.progressBarLoad.PerformStep();
  splash.progressBarLoad.Refresh();
}

Таким образом, вы также можете поместить этот метод вSplashForm (удалить splash.) и добавить InitProgress:

public void InitProgress(int stepCount, int stepIncrement)
{
  progressBarLoad.Value = 0;
  progressBarLoad.Maximum = stepCount;
  progressBarLoad.Step = stepIncrement;
}

Поэтому вы можете сделать это сейчас:

var splash = new SplashForm();
splash.InitProgress(5, 1);
splash.Show();
Init1();
splash.DoProgress();
Init2();
splash.DoProgress();
Init3();
splash.DoProgress();
Init4();
splash.DoProgress();
Init5();
splash.DoProgress();
splash.Close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...