Winform webbrowser не заменен

Из моей Form1 я инициализирую scrapper класса. В классе scrapper используется функция login. Идея состоит в том, что этот класс регистрирует пользователя на веб-сайте и возвращает веб-браузер, чтобы в Form1 доступен вход в систему управления веб-браузером.

У меня есть этот код: Form1

private void button1_Click(object sender, EventArgs e)
{
 Scrapper scrapper = new Scrapper(this);
 scrapper.login(conf._webLogin); 
}

public void updateLoginWeb(WebBrowser web)
{
 webBrowser1 = web;
 MessageBox.Show("DONE");
}

Класс conf:

public WebBrowser _webLogin = new WebBrowser();

Класс скребка:

private Form1 parent;

private WebBrowser _web_Login = new WebBrowser();


public Scrapper()
{

}

public Scrapper(Form1 parent)
 : this()
{
 this.parent = parent;
}

public void login(WebBrowser web)
{
 _web_Login = web;
 _web_Login.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(login_DocumentCompleted);
 _web_Login.Navigate("http://www.google.com/");
}

private void login_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
 //This line is so you only do the event once 
 if (e.Url != _web_Login.Url)
 return;
 parent.updateLoginWeb(_web_Login);
}

Я использую Google как тест, но ничего не работает (даже не на другом сайте).

Проблема в том, что веб-браузер в Form не обновляется. Это еще белый экран.

Что вы, ребята, думаете об этом? Вы знаете, в чем проблема, или вы, ребята, знаете, лучший способ справиться с этим?

1 ответ

Я думаю, ваша проблема в том, что вы не можете просто назначить переменную webBrowser:

webBrowser1 = web;

Вы меняете переменную Form1.webBrower1, но коллекция Forms.Controls все еще указывает на исходный элемент управления webBrowser.

Не можете ли вы просто передать Form1.webBrower1 функции scrapper.login?:

private void button1_Click(object sender, EventArgs e)
{
 Scrapper scrapper = new Scrapper(this);
 scrapper.login(webBrowser1); 
}

public void updateLoginWeb(WebBrowser web)
{
 //webBrowser1 = web; // you don't need this anymore
 MessageBox.Show("DONE");
}

Если вам действительно нужно заменить свой контроль, вы можете сделать что-то вроде:

public void updateLoginWeb(WebBrowser web)
{
 Controls.Remove(webBrowser1);
 Controls.Add(web);
 webBrowser1 = web; // you don't need this anymore
 MessageBox.Show("DONE");
}

Но вы, вероятно, будете вручную устанавливать новые свойства макета веб-браузера.

licensed under cc by-sa 3.0 with attribution.