从我的Form1
我初始化课程scrapper
。在scrapper
类中是一个函数login
。我们的想法是,该类日志是网站上的用户,并返回Web浏览器,以便Form1
中可以使用登录的Web浏览器控件。
到目前为止我已经有了这段代码: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);
}
我使用谷歌作为测试,但没有任何作用(甚至不是另一个网站)。
问题是Form
中的网页浏览器未更新。它仍然是一个白色的屏幕。
你们怎么看待这个?你知道问题是什么,或者你们知道更好的方法来处理这个问题吗?
答案 0 :(得分: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");
}
但您可能需要手动设置新的Web浏览器布局属性。