在我的Form1中,我初始化了一个类scraper。在scraper类中有一个函数login。其思想是,该类将用户登录到网站上,并返回web浏览器,以便在Form1中可以使用登录的webbrowser控件。
到目前为止,我已经掌握了以下代码:Form1
private void button1_Click(object sender, EventArgs e)
{
Scraper scraper = new Scraper(this);
scraper.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 Scraper()
{
}
public Scraper(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中的isn浏览器没有更新。它仍然是白色的屏幕。
你们觉得这个怎么样?你们知道问题出在哪里吗,或者你们知道更好的方法来处理这个问题吗?
发布于 2013-08-07 01:05:41
我认为您的问题是不能简单地赋值webBrowser变量:
webBrowser1 = web;您正在更改Form1.webBrower 1变量,但是Forms.Controls集合仍然指向原始的webBrowser控件。
你不能把Form1.webBrower 1传递给scraper.login函数吗?:
private void button1_Click(object sender, EventArgs e)
{
Scraper scraper = new Scraper(this);
scraper.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");
}但是您可能会手动设置新的webbrowser布局属性。
https://stackoverflow.com/questions/18092618
复制相似问题