如何在事件处理程序内调用WebBrowser上的方法?

时间:2012-09-07 23:08:08

标签: c# .net events webbrowser-control

这就是我所拥有的:

public void initiate(WebBrowser browser)
{         
   browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(refDocumentCompleted);
   // navigate browser to the referal Uri
   browser.Navigate(refreral);

   browser.DocumentCompleted -= refDocumentCompleted;
   //remove here so that it doesn't do this everytime a document is completed, i want it just in this method
}

private void refDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // want to call navigate method on browser here. but Its out of scope.
}

我希望它能够导航到referral,然后一旦加载导航到另一个存储为类中全局字符串的页面。

我确信我的麻烦来自于对事件如何运作的理解不足,我试图阅读它,但似乎无法理解它,但不认为我需要创建我自己的经纪人。

3 个答案:

答案 0 :(得分:2)

您已拥有webbrowser对象。你只需要施展它:

((WebBrowser)sender).Navigate(...);

答案 1 :(得分:1)

使用lambdas,例如:

public void initiate(WebBrowser browser)
{

    browser.DocumentCompleted += (sender, e) => {
        browser.DoStuff(); // it's in scope via closure
    };

    // etc
}

编辑:添加/删除它,将lambda分配给变量:

public void initiate(WebBrowser browser)
{

    var doStuff = (sender, e) => {
        browser.DoStuff(); // it's in scope via closure
    };

    browser.DocumentCompleted += doStuff;

    // etc

    browser.DocumentCompleted -= doStuff;
}

答案 2 :(得分:0)

initiate方法中,WebBrowser存储在实例字段中,然后从事件处理程序中引用它:

private WebBrowser _browser;

// inside initiate 
_browser = browser;

// Inside event handler
_browser.Navigate(...);