最近弄得一個小軟件,需要用到富文本編輯器,richtextbox,一開始以為是和文本框一樣的用法,但是實踐起來碰壁之后才知道並不簡單。
richtextbox 類似於Word,是一個可編輯的控件。結構圖(來自網絡)
我的主要用途是用來支持一個基於C#的考試系統,由於考試科目涉及到圖片以及還有復雜的數學公式,所以,傳統的textbox控件是不能同時支持圖片和文字以及rtf格式的類型的,而richtextbox恰好可以支持。
難點1、 添加試題,將帶有格式的文本輸入進richtextbox,並存到數據庫中。
二進制
這種帶格式的文本內容是不能直接存到數據庫中的,所以必須將其內容進行轉換,轉換成數據庫支持的格式,首先就是想到了二進制,經過實踐,通過將其內容轉換成二進制文件是可以保存到數據庫中的,但是存在一個問題,就是程序運行時,將帶有圖片的文本內容存到數據庫中后,本次運行的過程中是可以讀取出來的,但是關閉程序后, 再次運行,就會出現路徑錯誤的錯誤。
base64String
經過一番探索,發現可以將其內容轉換成base64String的格式,然后在存到數據庫就可以實現自由存取。所以創建了以下的方法,用來將richtextbox中的內容轉換成數據庫可存儲的格式
using System.IO;
//將富文本控件的內容轉換成string類型
public string GetTextByRichBox(RichTextBox box)
{
//創建一個流
MemoryStream s = new MemoryStream();
//獲得富文本中的內容
TextRange documentTextRange = new TextRange(box.Document.ContentStart, box.Document.ContentEnd);
//將富文本中的內容轉換成xaml的格式,並保存到指定的流中
documentTextRange.Save(s, DataFormats.XamlPackage);
//將流中的內容轉換成字節數組,並轉換成base64的等效格式
return Convert.ToBase64String(s.ToArray());
}
將數據庫中的數據轉換回richtextbox可是別的內容的方法如下:
/// <summary>
/// 將數據庫中的內容轉換回richtextbox可識別的內容
/// </summary>
/// <param name="data">數據庫取出的數據</param>
/// <param name="box">接收的richtextbox控件名稱</param>
public void ShowTextToRichBox(string data,RichTextBox box)
{
MemoryStream s = new MemoryStream((Convert.FromBase64String(Convert.ToString(data))));
TextRange TR = new TextRange(box.Document.ContentStart, box.Document.ContentEnd);
TR.Load(s, DataFormats.XamlPackage);
}
————————————————
版權聲明:本文為CSDN博主「LLLDa_&」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Ming_5257/article/details/90144316