Индикатор выполнения, работающий в веб-браузере, созданный в коде С#

Я программирую веб-браузер на С#, и у меня есть следующая проблема: при нажатии кнопки в tabControl1 с помощью веб-браузера создается новая вкладкаPage.

private void button3_Click(object sender, EventArgs e)
    {
        WebBrowser browser = new WebBrowser();
        browser.Dock = DockStyle.Fill;
        browser.Url = new System.Uri("http://google.com");
        tabControl1.TabPages.Add(new TabPage("Aba "+ (tabControl1.TabCount + 1).ToString()));
        tabControl1.TabPages[tabControl1.TabCount - 1].Controls.Add(browser);

    }

Мне нужно знать, как заставить индикатор выполнения работать с веб-браузером, принадлежащим текущей активной вкладке. Как и куда вставить следующий код:

toolStripProgressBar1.Maximum = (int) e.MaximumProgress;
toolStripProgressBar1.Value = (int)e.CurrentProgress;

person Lucas Dias    schedule 06.06.2013    source источник
comment
Ответ здесь stackoverflow.com/questions/11814523/   -  person dsfgsho    schedule 07.06.2013
comment
я не использую фиксированный веб-браузер, как в ссылке, которую вы отправили. В моей программе WebBrowser создается в коде. Если я напишу код в webBrowser1.ProgressChanged, он будет работать только в webBrowser1, а другие вкладки не будут взаимодействовать с индикатором выполнения.   -  person Lucas Dias    schedule 07.06.2013


Ответы (2)


Вы можете использовать анонимную функцию:

WebBrowser browser = new WebBrowser();
browser.Dock = DockStyle.Fill;
browser.Url = new System.Uri("http://google.com");
tabControl1.TabPages.Add(new TabPage("Aba " + (tabControl1.TabCount + 1).ToString()));
tabControl1.TabPages[tabControl1.TabCount - 1].Controls.Add(browser);
browser.ProgressChanged += new WebBrowserProgressChangedEventHandler( delegate (object sender, WebBrowserProgressChangedEventArgs events)
    {
        if ((int)events.CurrentProgress > 0)
        {
            toolStripProgressBar1.Maximum = (int)events.MaximumProgress;
            toolStripProgressBar1.Value = (int)events.CurrentProgress;
        }
    });
person fcuesta    schedule 07.06.2013

У меня была проблема с дроблением, потому что полоса прогресса была полностью заполнена, так что вот эта проблема решена.

    private void webBrowser1_ProgressChanged(object sender, WebBrowserProgressChangedEventArgs e)
    {
        if ((int)e.CurrentProgress > 0)
        {
            ProgressBar.Maximum = (int)e.MaximumProgress;
            if (ProgressBar.Maximum == (int)e.MaximumProgress)
                ProgressBar.Value = 0;
            ProgressBar.Value = (int)e.CurrentProgress;                
        }
    }
person Alexander    schedule 23.10.2014
comment
не совсем, просто если кто-то получит ту же ошибку, что и я... :d - person Alexander; 24.10.2014