2010-09-27 4 views
0

Это в C#Создание нового события с объектами

Итак, я пытаюсь создать событие для ProgressChanged для нескольких элементов управления WebBrowser. Все они динамически созданы, а также индикатор выполнения. Поэтому я не могу позвонить ему раньше. То, что я делаю, это передать индикатор выполнения через массивы объектов, которые запускаются. Наконец, он получает окончательный метод, в котором я создаю браузер и вам нужно создать событие Browser.ProgressChanged.

Вот код ....

private object[] runTests(string banText, object tabControlName, 
     object progressBar, int runThisTest, string testName) 
    { 
     object[] theReturn = null; 
     if (stopTests == false) 
     { 
      var tabPageBrowser = new TabPage(); 
      var Browser = new WebBrowser(); 

      (tabControlName as TabControl).TabPages.Add(tabPageBrowser); 
      tabPageBrowser.Name = tabControlName.ToString(); 
      if (banText == "999999999") 
      { 
       tabPageBrowser.Text = "History"; 
      } 
      else 
      { 
       tabPageBrowser.Text = testName; 
      } 
      tabPageBrowser.Font = new System.Drawing.Font("Trebuchet MS", 8.25F, 
       System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 
      Browser.Dock = DockStyle.Fill; 
      Browser.Url = new Uri(testStrings(runThisTest, banText)); 
      Browser.Name = tabControlName.ToString(); 
      Browser.ScriptErrorsSuppressed = true; 
      tabPageBrowser.Controls.Add(Browser); 
      Browser.ProgressChanged += new WebBrowserProgressChangedEventHandler(Browser_ProgressChanged); 

      try 
      { 
       while (Browser.ReadyState != WebBrowserReadyState.Complete) 
       { 
        Application.DoEvents(); 
       } 
      } 
      catch 
      { 
       return null; 
      } 
      IntPtr pHandle = GetCurrentProcess(); 
      SetProcessWorkingSetSize(pHandle, -1, -1); 

      object[] browserObjects = new object[2]; 
      browserObjects[0] = tabPageBrowser; 
      browserObjects[1] = Browser; 
      if(browserObjects != null) 
      { 
       theReturn = browserObjects; 
      } 
     } 
     return theReturn; 
    } 

Теперь мой вопрос, как я могу добавить «ProgressBar» объект, когда я создать событие, так что я могу позвонить на него, когда событие было выпущено. Я в основном создаю единый индикатор прогресса для 5+ элементов управления WebBrowser и связывая их прогресс вместе. Поэтому по какой-то причине я попытался добавить объект к методу, и он вышел из строя. Пожалуйста, помогите и спасибо !.

+0

Я попытался создать событие, как так Browser.ProgressChanged + = новый WebBrowserProgressChangedEventHandler (Browser_ProgressChanged (это, ProgressBar, WebBrowserProgressChangedEventArgs); Говорит это тип используется как переменные, но не уверен другими способами сделайте это. Это также не сработает ... Это было похоже на длинный снимок. – Alex

ответ

1
  Browser.ProgressChanged += Browser_ProgressChanged; 
... 

     void Browser_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e) { 
      if (e.MaximumProgress > 0) { 
       int prog = (int)(100 * e.CurrentProgress/e.MaximumProgress); 
       progressBar1.Value = prog; 
      } 
     } 

     private ProgressBar progressBar1; 
+0

Проблема с этим, однако, я не знаю, как это произошло. Имя ... Это в объекте, который я использовал в этом методе ». object progressBar "... он создается в более раннем методе. – Alex

+0

Просто добавьте поле в свой класс, чтобы сохранить ссылку. Вместо локальной переменной. –

+0

Вы говорите как публичный o ▪ Таблица? Если это так, я об этом не думал. – Alex

Смежные вопросы