Прогресс-бар, c # - PullRequest
       23

Прогресс-бар, c #

1 голос
/ 02 июля 2010

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

«строка» не содержит определения «Максимум», и не найдено никакого метода расширения «Максимум», принимающего первый аргумент типа «строка»(вам не хватает директивы использования или ссылки на сборку?)

  private void PassPBName(string PBName)
        {

            // Event for the browser
            AxSHDocVw.DWebBrowserEvents2_ProgressChangeEvent e;

            /* The CurrentProgress variable from the raised event
                  * gives you the current number of bytes already downloaded
                  * while the MaximumProgress is the total number of bytes
                  * to be downloaded */
            if (e.progress < e.progressMax)
            {
                // Check if the current progress in the progress bar
                // is >= to the maximum if yes reset it with the min
                if (PBName.Value >= PBName.Maximum)
                    PBName.Value = PBName.Minimum;
                else
                    // Just increase the progress bar
                    PBName.PerformStep(); 
            }
            else
                // When the document is fully downloaded
                // reset the progress bar to the min (0)
                PBName.Value = PBName.Minimum;
        }
        private void WBIntranet_ProgressChange(object sender, AxSHDocVw.DWebBrowserEvents2_ProgressChangeEvent e)
        {

            string progressBar = PBIntranet.Value.ToString();
            PassPBName(progressBar);
        }

Спасибо

Ответы [ 4 ]

1 голос
/ 02 июля 2010

У вас есть строка с именем PBName, но вы используете ее, как если бы это был класс индикатора выполнения.Возможно, вы хотели пройти урок?Предполагая, что PBIntranet является фактическим классом панели progess, похоже, что вы должны передать это в вашу PassPBName функцию.Просто догадываясь, вам также нужно передать e из вашего WBIntranet_ProgressChange события, а не локально объявить другое в PassPBName, что, я не думаю, будет работать так, как вы собираетесь.

1 голос
/ 02 июля 2010

Если вы отправляете имя индикатора выполнения, вам нужно использовать что-то вроде метода FindControl, чтобы найти элемент управления. Лучше, если вы отправите ссылку на элемент управления ProgressBar вместо:

private void PassPBReference(ProgressBar PBName) {
  ...
}

и назовите его просто:

PassPBReference(PBIntranet);

(Вы, конечно, должны придумать лучшее имя для метода, которое отражает его назначение, а не только то, как вы передаете ему параметры.)

0 голосов
/ 06 июля 2010

Я нашел решение, если кто-то еще хочет знать, как это сделать.

private void PassPBName(ToolStripProgressBar PBName, AxSHDocVw.DWebBrowserEvents2_ProgressChangeEvent e)
    {
              /* The CurrentProgress variable from the raised event
              * gives you the current number of bytes already downloaded
              * while the MaximumProgress is the total number of bytes
              * to be downloaded */
        if (e.progress < e.progressMax)
        {
            // Check if the current progress in the progress bar
            // is >= to the maximum if yes reset it with the min
            if (PBName.Value >= PBName.Maximum)
                PBName.Value = PBName.Minimum;
            else
                // Just increase the progress bar
                PBName.PerformStep();
        }
        else
            // When the document is fully downloaded
            // reset the progress bar to the min (0)
            PBName.Value = PBName.Minimum;
    }

    private void WBIntranet_ProgressChange(object sender, AxSHDocVw.DWebBrowserEvents2_ProgressChangeEvent e)
    {

        //Pass the PB bar name to PassPBName function to show current progress.
         PassPBName (PBIntranet, e);
    }
0 голосов
/ 02 июля 2010

Вы не можете ссылаться на объект, просто имея его имя в переменной.Вы должны получить доступ к нему через Reflection.Примерно так:

Using System.Reflection;

ProgressBar myProgress = (ProgressBar)this.GetType().GetField(PBName).GetValue(this);

Я немного отрывочен в синтаксисе, но, возможно, это поможет продвинуть вас дальше.Если у вас есть реальный объект, вы можете получить доступ к Maxmimum / Minimum / и т. Д.

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