在 .NET Framework 2.0 裡面,有一個 WebBrowser 控制項,可以把瀏覽器嵌入在我們的 Windows Forms 程式中。WebBrowser 其實是一個 ActiveX 控制項的 .NET 類別包裝 (wrapper)。

最近有一位朋友提到一個問題,是有關於如何偵測 WebBrowser 的捲軸位置改變了,以及如何設定 WebBrowser 的捲軸位置。原以為用 Spy++ 觀察視窗訊息就可以解決,但嘗試的結果發現,這個方法太累了,很可能做不到;即使能做到,花的時間也太多了。

後來找到了一個簡單的方法,原來 WebBrowser 控制項已經提供了屬性可以存取捲軸位置了,範例如下:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim doc As HtmlDocument = WebBrowser1.Document
        Dim elem As HtmlElement = doc.Body
        elem.ScrollTop = 100
    End Sub
 
只要先取得 WebBrowser 內部的 Document 物件,然後取得 Body 元素物件,再利用 Body 物件的 ScrollTop 屬性就可以取得和設定捲軸位置了。上面的範例會將 WebBrowser1 的捲軸位置移動到 100 pixel 的地方。

至於要如何偵測 WebBrowser 的捲軸位置移動了,這個問題恐怕還是要用視窗訊息的方式來解決吧。不過,這裡提供一個土方法:利用一個 Timer 元件,定時讀取 WebBrowser 的捲軸位置,如果跟上一次讀取的結果不同,就知道捲軸位置改變了。雖然有點老土,不過卻很簡單。如果不在意些微的延遲時間,這方法還是挺管用的。