3

これは私が持っているものです:

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、それがロードされたら、クラスにグローバル文字列として保存されている別のページに移動することです。

ここでの私の問題は、イベントがどのように機能するかについての理解が不十分なことによるものだと確信しています。私はそれを読み込もうとしましたが、頭を悩ませているようには見えませんが、独自のハンドラーを作成する必要はないと思います。 。

4

3 に答える 3

2

すでにwebbrowserオブジェクトがあります。あなたはそれをキャストする必要があります:

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

于 2012-09-07T23:18:55.760 に答える
1

ラムダを使用します。例:

public void initiate(WebBrowser browser)
{

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

    // etc
}

編集:それを追加/削除するには、ラムダを変数に割り当てます:

public void initiate(WebBrowser browser)
{

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

    browser.DocumentCompleted += doStuff;

    // etc

    browser.DocumentCompleted -= doStuff;
}
于 2012-09-07T23:20:29.037 に答える
0

メソッドでインスタンスフィールドにをinitiate保存しWebBrowser、イベントハンドラーから参照します。

private WebBrowser _browser;

// inside initiate 
_browser = browser;

// Inside event handler
_browser.Navigate(...);
于 2012-09-07T23:10:23.703 に答える