WebBrowser 控制項設計模式設定

2021-05-17 22:05:33 字數 2103 閱讀 6546

當使用此元件時,會自動應用設計模式,並為文件建立乙個編輯模板。但是,作為參考,下面簡單說明這是如何實現的。

應用設計模式需要使用 com 介面,新增乙個 mshtml 的 "microsoft html object library" 的引用,並新增乙個對 'mshtml' 的 'using'。

在把改變寫入到 dom 文件之前,有必要新增乙個 body 到控制項。要這樣做,你可以簡單地設定一些文字到 webbrowser 控制項的 documenttext 屬性中。

webbrowser1.documenttext = "

"下面的**可以取得新的 domdocument com 介面的引用,並設定設計模式為 "on"。

ihtmldocument2 doc =webbrowser1.document.domdocument as ihtmldocument2;doc.designmode = "on";

最後,我把 webbrowser 控制項的上下文選單替換掉,這樣 ie 瀏覽器的預設上下文選單就不會顯示出來。

webbrowser1.document.contextmenushowing += new htmlelementeventhandler(document_contextmenushowing);

瀏覽器現在處於設計模式中,使用乙個自定義方法來顯示指定的上下文選單。

格式化文字

使用 browser.document 中的 execcommand 方法,你可以把格式和編輯功能應用到設計模式下的瀏覽器控制項。

下面是一些例子:

public void cut()public void paste()public void copy()

某些命令用於繫結(顯示)當前選區的格式。

public void bold()public void italic()

同步重新整理選定文字的格式按鈕

下面介紹一些比發出格式化命令到瀏覽器更有用的技巧。每 200 毫秒,我逐一查詢瀏覽器編輯選區的狀態,並據此設定工具欄格式按鈕的狀態。

private void timer_tick(object sender, eventargs e)

你可能已經注意到這兒使用了乙個 tick 計時器事件。外部的元件可以訂閱此事件來更新 gui 的狀態。舉例來說,它們將基於編輯器控制項的狀態,重新整理「剪下/複製/貼上/撤銷/重複」(操作)的 enabled 狀態。

我通過使用從 webbrowser 控制項返回的 com 文件介面,來完成此任務,先使用:

ihtmldocument2 doc = webbrowser1.document.domdocument as ihtmldocument2;

然後,使用 querycommandstate  方法來確定當前選區的狀態:

public bool isbold()public bool isitalic()public bool isunderline()

連線按鈕和字型控制項以一種簡單的方式管理,但我將會保留以**檢測的方法。

取得焦點

讓控制項取得焦點不一定是簡單的。 webbrowser 控制項本身不接受焦點。 webbrowser 控制項的文件也不接受焦點。但是,body 會取得焦點,可以假定有乙個 body 元素在控制項中。

private void superfocus()

當然,你決不需要直接呼叫此方法。在控制項上呼叫 focus 方法,會把焦點放置到包含了 webbrowser 控制項的編輯器控制項上。當接收到 gotfocus  事件時,編輯器控制項會自動把焦點轉到 webbrowser 控制項文件的 body 上。

取得文字或 html

分別使用 bodyhtml 和 bodytext 方法,可以返回 html 和文字。

連線到元件程式集

在 visual studio 2005 中,你可以連線到乙個程式集 (新增乙個引用),即使程式集是可執行的(檔案)。此編輯器是作為內嵌在窗體的元件來編寫的,因此你可以把這個元件新增到控制項面板上,並把它拖放到你的應用程式中。此控制項的名稱為 editor,在命名空間 design 中。

結束語.net 2.0 中的 webbrowser 控制項可以作為乙個有效的文字編輯器來使用。當你需要乙個 html 編輯器控制項時,它很有用。但是在某些範圍內,不能完全直接地使用 webbrowser 控制項來實現。本文試圖展示一些讓它工作的必要技巧

C 刪除WebBrowser控制項Session

因為要搞乙個類似帳號多開的小輔助,但是很坑爹的發現,在乙個webbrowser中,就算重新登入,顯示的仍然是上乙個帳號,嘗試清空cookie無效,目測就是session的問題,因為session資訊是屬於httponly cookie,所以不能直接清除。搜了一圈,最終在stackoverflow上找...

指定Webbrowser控制項所用IE核心版本

解決方法是在登錄檔中為你的程序指定引用ie的版本號。比如我的程式叫做a.exe 對於32位程式 hkey local machine software microsoft internet explorer main featurecontrol feature browser emulation ...

C 刪除WebBrowser控制項的Session

因最近做乙個成績查詢匯出的程式,用到webbrowser控制項,該查詢的 限制乙個會話只能查詢3次成績,而我要查詢4000多人的成績。using system.runtime.interopservices private const int internet option end browser ...