WebBrowser 控制元件設計模式設定
當使用此元件時,會自動應用設計模式,併為文件建立一個編輯模板。但是,作為參考,下面簡單說明這是如何實現的。
應用設計模式需要使用 COM 介面,新增一個 MSHTML 的 "Microsoft HTML Object Library" 的引用,並新增一個對 'MSHTML' 的 'using'。
在把改變寫入到 DOM 文件之前,有必要新增一個 body 到控制元件。要這樣做,你可以簡單地設定一些文字到 WebBrowser 控制元件的 DocumentText 屬性中。
webBrowser1.DocumentText = "<html><body></body></html>"
下面的程式碼可以取得新的 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(){ webBrowser1.Document.ExecCommand("Cut", false, null);}public void Paste(){ webBrowser1.Document.ExecCommand("Paste", false, null);}public void Copy(){ webBrowser1.Document.ExecCommand("Copy", false, null);}
某些命令用於繫結(顯示)當前選區的格式。
public void Bold(){ webBrowser1.Document.ExecCommand("Bold", false, null);}public void Italic(){ webBrowser1.Document.ExecCommand("Italic", false, null);}
同步重新整理選定文字的格式按鈕
下面介紹一些比發出格式化命令到瀏覽器更有用的技巧。每 200 毫秒,我逐一查詢瀏覽器編輯選區的狀態,並據此設定工具欄格式按鈕的狀態。
private void timer_Tick(object sender, EventArgs e){ SetupKeyListener(); boldButton.Checked = IsBold(); italicButton.Checked = IsItalic(); underlineButton.Checked = IsUnderline(); orderedListButton.Checked = IsOrderedList(); unorderedListButton.Checked = IsUnorderedList(); linkButton.Enabled = SelectionType == SelectionType.Text; UpdateFontComboBox(); UpdateFontSizeComboBox(); if (Tick != null) Tick();}
你可能已經注意到這兒使用了一個 Tick 計時器事件。外部的元件可以訂閱此事件來更新 GUI 的狀態。舉例來說,它們將基於編輯器控制元件的狀態,重新整理“剪下/複製/貼上/撤銷/重複”(操作)的 Enabled 狀態。
我通過使用從 WebBrowser 控制元件返回的 COM 文件介面,來完成此任務,先使用:
IHTMLDocument2 doc = webBrowser1.Document.DomDocument as IHTMLDocument2;
然後,使用 queryCommandState 方法來確定當前選區的狀態:
public bool IsBold(){ return doc.queryCommandState("Bold");}public bool IsItalic(){ return doc.queryCommandState("Italic");}public bool IsUnderline(){ return doc.queryCommandState("Underline");}
連線按鈕和字型控制元件以一種簡單的方式管理,但我將會保留以程式碼檢測的方法。
取得焦點
讓控制元件取得焦點不一定是簡單的。 WebBrowser 控制元件本身不接受焦點。 WebBrowser 控制元件的文件也不接受焦點。但是,body 會取得焦點,可以假定有一個 body 元素在控制元件中。
private void SuperFocus(){ if (webBrowser1.Document != null && webBrowser1.Document.Body != null) webBrowser1.Document.Body.Focus();}
當然,你決不需要直接呼叫此方法。在控制元件上呼叫 Focus 方法,會把焦點放置到包含了 WebBrowser 控制元件的編輯器控制元件上。當接收到 GotFocus 事件時,編輯器控制元件會自動把焦點轉到 WebBrowser 控制元件文件的 body 上。
取得文字或 HTML
分別使用 BodyHtml 和 BodyText 方法,可以返回 HTML 和文字。
連線到元件程式集
在 Visual Studio 2005 中,你可以連線到一個程式集 (新增一個引用),即使程式集是可執行的(檔案)。此編輯器是作為內嵌在窗體的元件來編寫的,因此你可以把這個元件新增到控制元件皮膚上,並把它拖放到你的應用程式中。此控制元件的名稱為 Editor,在名稱空間 Design 中。
結束語
.NET 2.0 中的 WebBrowser 控制元件可以作為一個有效的文字編輯器來使用。當你需要一個 HTML 編輯器控制元件時,它很有用。但是在某些範圍內,不能完全直接地使用 WebBrowser 控制元件來實現。本文試圖展示一些讓它工作的必要技巧
相關文章
- C# WebBrowser設定代理C#Web
- 設計模式定義設計模式
- WebBrowser 控制元件-說明Web控制元件
- Winform獲取並設定WebBrowser所用的IE核心版本ORMWeb
- 設計模式----工廠設計模式設計模式
- 設計模式-工廠設計模式設計模式
- Java設計模式——模板設計模式Java設計模式
- 設計模式---外觀設計模式設計模式
- [設計模式]單例設計模式設計模式單例
- 設計模式-裝飾設計模式設計模式
- 深色模式設定模式
- 設定performance模式ORM模式
- IO模式設定網路程式設計常見問題總結—IO模式設定,阻塞與非阻塞模式程式設計
- 設計模式之單例設計模式設計模式單例
- 設計模式(四)Singleton設計模式設計模式
- PHP設計模式—建立型設計模式PHP設計模式
- 【設計模式】設計模式的分類設計模式
- 【設計模式】設計模式(一)-- 大話設計模式讀書筆記設計模式筆記
- JavaScript設計模式初探--單例設計模式JavaScript設計模式單例
- 設計模式總結 —— 單例設計模式設計模式單例
- 23種設計模式(二)---策略設計模式設計模式
- 23種設計模式(八)-原型設計模式設計模式原型
- 一.設計模式之工廠設計模式設計模式
- JavaScript設計模式之建立型設計模式JavaScript設計模式
- 通俗 Python 設計模式——原型設計模式Python設計模式原型
- 設計模式_JAVA動態代理設計模式設計模式Java
- Java設計模式(工廠方法設計模式)Java設計模式
- 《從設計到模式》——解讀設計模式設計模式
- 玩轉設計模式——設計模式之禪設計模式
- Java設計模式1:設計模式概論Java設計模式
- 【設計模式】漢堡中的設計模式——策略模式設計模式
- 設計原則 設計模式設計模式
- 設計模式 - 設計原則設計模式
- 【設計模式】設計原則設計模式
- 設定歸檔模式模式
- Java設計模式(一):設計模式概述、UML圖、設計原則Java設計模式
- 設計模式----代理模式設計模式
- 設計模式----中介模式設計模式