可用RichTextBox控件讀取rtf

可用RichTextBox控件讀取rtf:

     rtf 模版格式($:Text爲內容):html

 

public const String DefaultRtfTemplate =瀏覽器

@"{/rtf1/ansi/ansicpg936/deff0/deflang1033/deflangfe2052{/fonttbl{/f0/fnil/fcharset134  /'cb/'ce/'cc/'e5;}}"+編輯器

@"/viewkind4/uc1/pard/lang2052/f0/fs18$:Text}";字體

 

public static String GetDefaultRtf(String content)
{
        return  DefaultRtfTemplate.Replace("$:Text",content);this

}spa

 

public static String GetRefContent(content).net

{設計

        System.Windows.Forms.RichTextBox rtBox = new  System.Windows.Forms.RichTextBox();
        rtBox.Rtf =  GetDefaultRtf(content);
        return rtBox.Text;指針

}orm

 


RichTextBox控件

與經常使用的TextBox同樣,RichTextBox控件派生於TextBoxBase。因此,它與TextBox共享許多功能,但許多功能是不一樣的。TextBox經常使用於從用戶處獲取短文本字符串,而RichTextBox用於顯示和輸入格式化的文本(例如,黑體、下劃線和斜體)。它使用標準的格式化文本,稱爲Rich  Text Format (富文本格式)或 RTF。

在上面的示例中,咱們使用了標準的TextBox。也可使用RichTextBox來完成該任務。實際上,如後面的示例所示,能夠刪除textBoxOutput  文本框,在它的位置上插入一個同名的RichTextBox,這個示例還會像之前那樣運行。

RichTextBox控件的屬性

若是這種文本框比上一節介紹的文本框更高級,咱們就會指望它有一些新屬性。表15-11中列出了RichTextBox的一些經常使用屬性。

表  15-11

名    稱

描    述

CanRedo

若是上一個被撤銷的操做可使用Redo重複,這個屬性就是true

CanUndo

若是能夠在RichTextBox上撤銷上一個操做,這個屬性就是true,注意,CanUndo在TextBoxBase中定義,因此也能夠用於TextBox控件

RedoActionName

這個屬性包含經過Redo方法執行的操做名稱

DetectUrls

把這個屬性設置爲true,可使控件檢測URL,並格式化它們(在瀏覽器中是帶有下劃線的部分)

Rtf

它對應於Text屬性,但包含RTF格式的文本

SelectedRtf

使用這個屬性能夠獲取或設置控件中被選中的RTF格式文本。若是把這些文本複製到另外一個應用程序中,例如Word,該文本會保留全部的格式化信息

SelectedText

與SelectedRtf同樣,可使用這個屬性獲取或設置被選中的文本。但與該屬性的RTF版本不一樣,全部的格式化信息都會丟失

SelectionAlignment

它表示選中文本的對齊方式,能夠是Center, Left 或  Right

SelectionBullet

使用這個屬性能夠肯定選中的文本是否格式化爲項目符號的格式,或使用它插入或刪除項目符號

BulletIndent

使用這個屬性能夠指定項目符號的縮進像素值

SelectionColor

這個屬性能夠修改選中文本的顏色

SelectionFont

這個屬性能夠修改選中文本的字體

SelectionLength

使用這個屬性能夠設置或獲取選中文本的長度

SelectionType

這個屬性包含了選中文本的信息。它能夠肯定是選擇了一個或多個OLE對象,仍是僅選擇了文本

ShowSelectionMargin

若是把這個屬性設置爲true,在RichTextBox  的左邊就會出現一個頁邊距,這將使用戶更易於選擇文本

UndoActionName

若是用戶選擇撤銷某個動做,該屬性將獲取該動做的名稱

SelectionProtected

把這個屬性設置爲true,能夠指定不修改文本的某些部分

從上面的列表能夠看出,大多數新屬性都與選中的文本有關。這是由於在用戶處理其文本時,對它們應用的任何格式化操做都是對用戶選擇出來的文本進行的。萬一沒有選擇出文本,格式化操做就從光標所在的位置開始應用,該位置稱爲插入點。

RichTextBox控件的事件

RichTextBox使用的大多數事件與TextBox使用的事件相同,表15-12中有幾個有趣的新事件。

表  15-12

名    稱

描    述

LinkedClick

在用戶單擊文本中的連接時,引起該事件

Protected

在用戶嘗試修改已經標記爲受保護的文本時,引起該事件

(續表)   

名    稱

描    述

SelectionChanged

在選中文本發生變化時,引起該事件。若是因某些緣由不但願用戶修改選中的文本,就能夠在該事件中禁止修改

在下面的示例中,將建立一個很是基本的文本編輯器。它說明了如何修改文本的基本格式,如何加載和保存RichTextBox中的文本。爲了簡單起見,這個示例被加載和保存到固定的文件中。

試試看:RichTextBox示例

與往常同樣,首先設計窗體:

(1)  在C:/BegVCSharp/Chapter15目錄下建立一個新的C# Windows應用程序,命名爲RichTextBoxTest。

(2)  建立窗體,如圖15-14所示。文本框textSize應是一個TextBox控件。richTextBoxText文本框應是一個RichTextBox控件。

圖  15-14

(3) 如圖15-14所示命名控件。

(4)  除了文本框之外,把其餘控件的Text屬性設置爲其控件名稱(但表示該控件類型的部分不算)。

(5)  把textBoxSize文本框的Text屬性改成10。

(6) 錨定控件,如表15-13所示。

表  15-13

控 件 名 稱

Anchor值

buttonLoad 和 buttonSave

Bottom

RichTextBoxText

Top, Left, Bottom, Right

其餘控件

Top

(7)  把窗體的MinimumSize屬性值設置爲Size屬性的值。

示例的說明

前面是該示例的可見部分,下面添加代碼。雙擊Bold按鈕,在代碼中添加Click事件處理程序。下面是該事件的代碼:

private void buttonBold_Click(object  sender, EventArgs e)

{

   Font oldFont;

Font newFont;

   // Get the font that is being used in the selected text

   oldFont = this.richTextBoxText.SelectionFont;

   // If the font is using bold style now, we should remove the

   // Formatting

   if (oldFont.Bold)

      newFont = new Font(oldFont, oldFont.Style &  ~FontStyle.Bold);

   else

      newFont = new Font(oldFont, oldFont.Style |  FontStyle.Bold);

   // Insert the new font and return focus to the RichTextBox

   this.richTextBoxText.SelectionFont = newFont;

   this.richTextBoxText.Focus();

}

首先獲取當前選中文本使用的字體,並把它賦給一個局部變量。而後檢查一下選中文本是否爲黑體。若是是,就去除黑體設置;不然就設置黑體。使用oldFont做爲原型,建立一個新字體,但根據須要添加或刪除黑體格式。

最後,把新字體賦給選中的文本,把焦點返回給RichTextBox。Font對象詳見第33章。

buttonItalic 和  buttonUnderline的事件處理程序的代碼與上面的代碼相同,但檢查相關樣式的代碼不一樣。雙擊Italic 和  Underline兩個按鈕,添加下面的代碼:

private void buttonItalic_Click(object  sender, EventArgs e)

{

   Font oldFont;

   Font newFont;

   // Get the font that is being used in the selected text

   oldFont = this.richTextBoxText.SelectionFont;

   // If the font is using Italic style now, we should remove it

   if (oldFont.Italic)

      newFont = new Font(oldFont, oldFont.Style &  ~FontStyle.Italic);

   else

      newFont = new Font(oldFont, oldFont.Style |  FontStyle.Italic);

   // Insert the new font

   this.richTextBoxText.SelectionFont = newFont;

   this.richTextBoxText.Focus();

}

private void buttonUnderline_Click(object sender, System.EventArgs  e)

{

   Font oldFont;

   Font newFont;

   // Get the font that is being used in the selected text

   oldFont = this.richTextBoxText.SelectionFont;

   // If the font is using Underline style now, we should remove  it

   if (oldFont.Underline)

      newFont = new Font(oldFont, oldFont.Style &  ~FontStyle.Underline);

   else

      newFont = new Font(oldFont, oldFont.Style |  FontStyle.Underline);

   // Insert the new font

   this.richTextBoxText.SelectionFont = newFont;

   this.richTextBoxText.Focus();

}

雙擊最後一個格式化按鈕Center,添加下面的代碼:

private void buttonCenter_Click(object  sender, System.EventArgs e)

{

   if (this.richTextBoxText.SelectionAlignment ==  HorizontalAlignment.Center)

      this.richTextBoxText.SelectionAlignment =  HorizontalAlignment.Left;

   else

      this.richTextBoxText.SelectionAlignment =  HorizontalAlignment.Center;

   this.richTextBoxText.Focus();

}

這裏必須檢查一下另外一個屬性SelectionAlignment,看看選中的文本是否已經居中對齊,由於咱們但願按鈕像一個開關那樣運做。若是文本已居中,就使它左對齊,不然就使它居中。HorizontalAlignment是一個枚舉,其值能夠是Left、Right、Center、Justify和  NotSet。在本例中,只檢查一下是否設置了Center,若是已經設置了,就把對齊方式設置爲Left。若是不是,就設置爲Center。

文本編輯器能進行的最後一個格式化操做是設置文本的大小。爲文本框Size添加兩個事件處理程序,一個處理程序控制輸入,另外一個處理程序檢測用戶輸入完一個值的時間。

在Properties窗口的Events列表中找到並雙擊textBoxSize  控件的KeyPress和Validated事件,給處理程序添加代碼。

與前面示例使用的Validating不一樣,Validated事件在進行完驗證後引起。這兩個事件處理程序都使用一個幫助方法ApplyTextSize,該方法帶有一個字符串參數,表示文本的大小:

private void textBoxSize_KeyPress(object  sender, KeyPressEventArgs e)

{

   // Remove all characters that are not numbers, backspace and  enter.

   if ((e.KeyChar < 48 || e.KeyChar > 57) &&

                                          e.KeyChar != 8 &&  e.KeyChar != 13)

   {

      e.Handled = true;

   }

   else if (e.KeyChar == 13)

   {

      // Apply size if the user hits enter

      TextBox txt = (TextBox)sender;

      if (txt.Text.Length > 0)

         ApplyTextSize(txt.Text);

      e.Handled = true;

      this.richTextBoxText.Focus();

   }

}

private void textBoxSize_Validated(object sender, CancelEventArgs  e)

{

   TextBox txt = (TextBox)sender;

   ApplyTextSize(txt.Text);

   this.richTextBoxText.Focus();

}

private void ApplyTextSize(string textSize)

{

   // Convert the text to a float because we'll be needing a float  shortly

   float newSize = Convert.ToSingle(textSize);

   FontFamily currentFontFamily;

   Font newFont;

   // Create a new font of the same family but with the new size

   currentFontFamily =  this.richTextBoxText.SelectionFont.FontFamily;

   newFont = new Font(currentFontFamily, newSize);

   // Set the font of the selected text to the new font

   this.richTextBoxText.SelectionFont = newFont;

}

KeyPress事件只容許用戶輸入一個整數,並在用戶按下回車鍵時,調用ApplyTextSize。咱們感興趣的是幫助方法ApplyTextSize。它首先把文本的大小從字符串轉換爲浮點數,咱們只容許用戶輸入整數,但在建立新字體時,須要使用浮點數,因此把它轉換爲正確的數據類型。

以後,獲取字體所屬的字體系列,從該系列中建立一個帶有新字號的新字體。最後,把選中文本的字體設置爲新字體。

這就是咱們所能進行的全部格式化操做,有一些操做能夠由RichTextBox自己處理。若是如今嘗試運行這個示例,就能夠把文本設置爲黑體、斜體和下劃線,還能夠居中文本。這就是咱們指望的操做,但還有一些比較有趣的操做。試着在文本中鍵入一個網址,例如http://  www.wrox.com,該文本就被控件識別爲一個Internet地址,加上下劃線,當把鼠標指針移到該文本的上面時,鼠標指針就會變成手的形狀。單擊該文本,就會打開一個網頁。咱們須要處理用戶單擊連接時引起的事件:LinkClicked。

在Properties窗口的Events列表中找到LinkClicked事件,雙擊它,給事件處理程序中添加代碼。咱們之前沒有見過這個事件處理程序。它用於提供單擊連接的文本,處理程序很是簡單,以下所示:

private void  richTextBoxText_LinkedClick(object sender,  

                                  System.Windows.Forms.LinkClickedEventArgs e)

{

   System.Diagnostics.Process.Start(e.LinkText);

}

這段代碼打開了默認的瀏覽器(若是瀏覽器沒有打開),並導航到該連接指向的站點。

應用程序的編輯部分就完成了。剩下的是加載和保存控件的內容。這裏使用一個固定的文件。雙擊Load按鈕,添加下面的代碼:

private void buttonLoad_Click(object  sender, EventArgs e)

{

   // Load the file into the RichTextBox

   try

   {

      richTextBoxText.LoadFile("Test.rtf");

   }

   catch (System.IO.FileNotFoundException)

   {

      MessageBox.Show("No file to load yet");

   }

}

這就完成了,不須要作其餘工做。由於咱們處理的是文件,因此老是有可能遇到異常,必須處理這些異常。在Load方法中,處理了因文件不存在而拋出的異常。保存文件也是這樣,雙擊Save按鈕,添加下面的代碼:

private void buttonSave_Click(object  sender, EventArgs e)

{

   // Save the text

   try

   {

      richTextBoxText.SaveFile("Test.rtf");

   }

   catch (System.Exception err)

   {

      MessageBox.Show(err.Message);

   }

}

如今運行示例,格式化一些文本,再單擊Save按鈕。清空文本框,單擊Load按鈕,剛纔保存的文本就會再次顯示出來。

相關文章
相關標籤/搜索