程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 如何用C#編寫文本編輯器(2)

如何用C#編寫文本編輯器(2)

編輯:關於C語言

文檔對象模型

在實際開發時不必挨個解決問題,我是首先確定文檔對象樹的結構,這裡使用了文檔對象模型的概念,其實我們已經碰到很多種文檔對象模型,最多的莫過於Html文檔對象模型,我們用JavaScript來控制HTML頁面內容時就是使用Html文檔對象模型,此外還有XML文檔對象模型,VBA操作的是Word或Excel文檔對象模型。使用文檔對象模型,可將文檔中所有的內容和內存中的某個對象聯系起來,當應用程序修改了內存的對象的數據,則相應的文檔內容就修改了。刪除了內存中的對象也就刪除了相應的文檔內容。一些文檔對象模型的思想可以參考http://www.w3.org。

文檔對象模型中有很常見的是對象的繼承和重載。大家可以看看.Net類庫的System.XML名稱空間下定義的XML文檔對象模型,你可以發現無論是XML文檔對象(XMLDocument),XML節點(XMLElement)還是屬性(XMLAttribute),甚至注釋(XMLComment)純文本數據(XMLText)都是從抽象類XMLNode繼承過來的。這樣設計的好處是可以很方便的遍歷XML文檔對象樹,各種對象都是從XMLNode派生的,都根據各自需要重載一些成員方法,其他程序都可把這些對象都看作XMLNode來使用,利用對象方法的重載和多態性來實現各自不同的處理。

基礎對象

在這種指導思想下,我也定義了一個抽象類TextElement,所有的文檔對象都是從該對象派生的。該類定義了以下虛成員:

◆Left,Top,Width,Height屬性,用於表示對象在的位置和顯示大小

◆RealLeft , RealTop 只讀屬性,表示對象在視圖區域中的顯示位置

◆RefreshSize 方法,用於重新計算對象的顯示大小

◆RefreshVIEw 方法,重新繪制對象

◆andleMouseDown 方法,處理鼠標按鍵按下事件

◆HandleMouseMove 方法,處理鼠標移動事件

◆HandleMouseUp 方法,處理鼠標按鍵松開事件

◆FromXML 方法,從一個XML節點加載對象數據

◆ToXML 方法,向一個XML節點保存對象的所有的數據

由於文檔內容是分層次的,因此還定義一個容器類型TextContainer,該類型從TextElement派生的,其中進行擴展來可以保存若干個子對象,它定義了以下虛成員:

◆MaxWidth 屬性,對象內容的最大寬度,一個文檔顯示寬度就是紙張寬度減去左右頁邊距的距離,文檔所有的內容被限制在這個顯示寬度中間,該屬性和顯示寬度有關

◆ChildElements 只讀屬性,返回所有子對象的集合,返回類型為System.Collections.ArrayList

◆AppendChild 方法,該方法參數為一個TextElement對象,本方法將該對象添加到子對象集合中

◆RemoveChild 方法,該方法參數為一個TextElement對象,本方法從子對象集合中刪除指定的文檔元素對象

◆RemoveChildRange 方法,該方法和RemoveChild類似,只是用於刪除一批子對象

◆InsertBefore 方法,該方法參數為兩個TextElement對象,第一個參數為要新增的文檔元素對象,第二個為插入點所在的文檔元素對象

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