Я в настоящее время работаю над приложением, которое имеет много веб-браузеры на управлении вкладкой с индикаторами выполнения на них. Для сохранения меня копирующий код, я хотел создать метод, куда я передаю имя индикатора выполнения в функцию. Я создал следующее ниже, но я получаю эту ошибку.
'строка' не содержит определение для 'Максимума' и никакой дополнительный метод 'Максимальное' принятие, что первый аргумент типа 'строка' мог быть найден (Вы пропускаете директиву использования или ссылку на сборку?)
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);
}
Спасибо
Я нашел решение, если кто-то еще хочет знать, как это сделать.
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);
}
Вы не можете ссылаться на объект, просто указав его имя в переменной. Вам нужно будет получить к нему доступ через Reflection. Примерно так:
Using System.Reflection;
ProgressBar myProgress = (ProgressBar)this.GetType().GetField(PBName).GetValue(this);
Я немного схематично говорю о синтаксисе, но, возможно, это поможет вам продвинуться дальше. Когда у вас есть реальный объект, вы можете получить доступ к Maxmimum / Minimum / etc.
Если вы отправляете имя индикатора выполнения, вам нужно использовать что-то вроде метода FindControl, чтобы найти элемент управления. Лучше, если вы вместо этого отправите ссылку на элемент управления прогрессбар:
private void PassPBReference(ProgressBar PBName) {
...
}
и вызовете его, используя только:
PassPBReference(PBIntranet);
(Вы, конечно, должны придумать лучшее имя для метода, которое отражает то, что он делает, а не только то, как вы передаете параметры к нему.)
У вас есть строка с именем PBName
, но вы используете ее, как если бы это был класс индикатора выполнения. Возможно, вы хотели сдать урок? Предполагая, что PBIntranet
является фактическим классом индикатора выполнения, похоже, вы должны передать его в свою функцию PassPBName
. Просто угадайте, вам также необходимо передать e
из вашего события WBIntranet_ProgressChange
, а не локально объявлять другое в PassPBName
, что, я думаю, не сработает. как вы намереваетесь.