Индикатор выполнения, c#

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

'строка' не содержит определение для 'Максимума' и никакой дополнительный метод 'Максимальное' принятие, что первый аргумент типа 'строка' мог быть найден (Вы пропускаете директиву использования или ссылку на сборку?)

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

Спасибо

1
задан skaffman 2 July 2010 в 15:00
поделиться

4 ответа

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

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
ответ дан 2 September 2019 в 23:20
поделиться

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

Using System.Reflection;

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

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

0
ответ дан 2 September 2019 в 23:20
поделиться

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

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

и вызовете его, используя только:

PassPBReference(PBIntranet);

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

1
ответ дан 2 September 2019 в 23:20
поделиться

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

1
ответ дан 2 September 2019 в 23:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: