none
關於webbrowser元件觸發事件 RRS feed

  • 問題

  •  

    在C#2005

    小弟在webBrowser1_DocumentCompleted事件中寫入簡單的測試

    messagebox.show("test")

    發現會觸發兩次以上??? 

    好比  webbrowser1.Navigate(www.pchome.com.tw); //連結單一網頁

    但在DocumentCompleted事件中卻觸發多次

    DocumentCompleted有說明是完全載入文件時所發生

    但看來好像不是這樣  因為網頁更本還沒完全載入就觸發了事件

    是小弟搞錯  還是有辦法處理這問題???

    還是有那個事件會在完全載入完成後才觸發的

     

    感謝~~

    2008年5月5日 下午 11:58

解答

  • 可能是該網頁有frame的設計,所以會多次觸發DocumentCompleted的事件.

     

    所以在DocumentCompleted的事件中,可以多加一個判斷.

     

    Code Snippet

    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (e.Url == webBrowser1.Url) //註解掉此行,就可以發現為什麼會觸發多次.
        {
            MessageBox.Show(e.Url.ToString() + " " + webBrowser1.Document.Url.ToString());
        }
    }

     

     

    2008年5月6日 上午 12:48
  • (1) 設定 webbrowser 的 url 屬性為 about:blank
    (2) 透過 webbrowser.navigate() 來瀏覽網頁
    (3) 避免多個 frame 載入多次觸發...設定 count 計數器

    參考以下程式碼:

    private int count = 0;
     
    private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {
        count++;
    }
     
    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        count--;
     
        if (e.Url.ToString() != "about:blank" && count ==0)
        {
            MessageBox.Show(e.Url.ToString());
        }
    }

    2008年5月6日 上午 08:54

所有回覆

  • 可能是該網頁有frame的設計,所以會多次觸發DocumentCompleted的事件.

     

    所以在DocumentCompleted的事件中,可以多加一個判斷.

     

    Code Snippet

    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        if (e.Url == webBrowser1.Url) //註解掉此行,就可以發現為什麼會觸發多次.
        {
            MessageBox.Show(e.Url.ToString() + " " + webBrowser1.Document.Url.ToString());
        }
    }

     

     

    2008年5月6日 上午 12:48
  • (1) 設定 webbrowser 的 url 屬性為 about:blank
    (2) 透過 webbrowser.navigate() 來瀏覽網頁
    (3) 避免多個 frame 載入多次觸發...設定 count 計數器

    參考以下程式碼:

    private int count = 0;
     
    private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
    {
        count++;
    }
     
    private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        count--;
     
        if (e.Url.ToString() != "about:blank" && count ==0)
        {
            MessageBox.Show(e.Url.ToString());
        }
    }

    2008年5月6日 上午 08:54
  • 小弟去測試單一框架網頁 就正常了

    按照各位大大的指導   去設定測試也OK了   又學到了

    感謝

    ^^

    2008年5月6日 上午 11:30