0

从我的Form1我初始化一个类scraper。在scraper类中是一个函数login。这个想法是该类记录用户在网站上的登录,并返回网络浏览器,以便登录的网络浏览器控件在Form1.

到目前为止,我已经得到了这段代码: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没有更新。它仍然是一个白屏。

你们怎么看这件事?你知道问题是什么,或者你们知道更好的方法来处理这个问题吗?

4

1 回答 1

1

我认为您的问题是您不能简单地分配 webBrowser 变量:

webBrowser1 = web;

您正在更改 Form1.webBrower1 变量,但 Forms.Controls 集合仍指向原始 webBrowser 控件。

您不能将 Form1.webBrower1 传递给 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");
}

但是您可能会手动设置新的网络浏览器布局属性。

于 2013-08-07T01:05:41.547 回答