程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 對 WebBrowser 和 AxWebBrowser 兩個控件使用經驗的一點補充

對 WebBrowser 和 AxWebBrowser 兩個控件使用經驗的一點補充

編輯:.NET實例教程

幾天前我寫過一篇文章介紹使用 AxWebBrowser 控件作擴展, http://blog.csdn.Net/AppFramework/archive/2008/01/16/2047610.ASPx 。後來發現有些問題:

1)打開Html界面不是XP風格的平面式的,是老式的3D風格的。而用.Net自帶的 WebBrowser 控件打開的頁面是XP風格的。

2)直接使用AxWebBrowser的 Focus() 方法,大部分時候都無法 Focus 浏覽器控件;

後來查資料,發現 WebBrowser 控件的 ActiveXInstance 其實就是 SHDocVw.WebBrowser 接口,包含了豐富的事件和屬性,AxWebBrowser 似乎也是基於次接口進行封裝的。

WebBrowser webBrowser = new WebBrowser();
webBrowser.Navigate("about:blank");//這句話重要,要先訪問一個URL,否則ActiveXInstalce為空
SHDocVw.WebBrowser xBrowser = webBrowser.ActiveXInstance as SHDocVw.WebBrowser;

然後就可以用 xBrowser 的各個事件了。
由於 SHDocVw.WebBrowser 事件沒有 sender 參數,直接對 SHDocVw.WebBrowser 編程在處理事件時無法區分事件源,所以要對 SHDocVw.WebBrowser 進行封裝,我的做法是作一個 UserControl,裡面組合了 WebBrowser 控件,然後對 SHDocVw.WebBrowser 的事件進行包裝,包裝結果跟 AxWebBrowser 的對應事件一樣。

如此處理後,問題1)解決了,得到XP風格的界面;問題2)還在處理。因為 WebBrowser 是放在 TabControl 裡的,我從 TabControl 派生了一個類重寫了 OnGotFocus 方法。

... override OnGotFocus(...)
{
    CurrentBrowser.Focus(); //CurrentBrowser 是當前想要激活的 WebBrowser 控件
}

總結:應該把 WebBrowser 和 AxWebBrowser 結合起來使用,各取所長

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved